楼主确实没接触过 python
def getHash(code, challenge):
byteCode = to_byte_array(code)
byteChallenge = to_byte_array(challenge)
b = bytes(byteCode + byteChallenge)
return sha512(b).hexdigest().upper()
def to_byte_array(hexString: str):
result = []
for i in range(0, len(hexString), 2):
result.append(int(hexString[i : i + 2], 16))
return result
1
szq8014 2021-12-03 18:18:36 +08:00
org.apache.commons.codec.digest.DigestUtils.sha512Hex(code + challenge) ?
|
2
pcbl 2021-12-03 18:21:53 +08:00 via Android 2
总感觉这 python 代码写的没有 python 味
|
3
yangyaofei 2021-12-03 18:44:23 +08:00
一般 Python 程序猿肯定不会写这种 hash......
c/c++ 的倒是有可能 |
4
yanbo92 2021-12-03 19:13:26 +08:00 via iPhone
sha512b 第一眼会忽略 512
|
5
unco020511 OP @yangyaofei #这是抓的某个国外 app 的包,不是自己写的
|
6
Juszoe 2021-12-03 22:21:34 +08:00
这段代码逻辑挺简单的,一楼是正解。
核心思想就是 sha512(code + challenge) |
7
unco020511 OP @szq8014 好像还是不太一样,我看上面代码不是做了什么每两个转一个 16 进制吗
|
8
gleox 2021-12-04 00:35:17 +08:00
to_byte_array()函数是把 16 进制字符串转换为 byte 数组。一个字节编码时对应的是 2 个 16 进制字符,所以解码 16 进制字符串的时候会截取 2 个字符转换为 1 个字节。
|
9
iyaozhen 2021-12-04 01:46:03 +08:00
怎么感觉这个 py 代码是 java 转过去的,java 才常操作 byte array
|
10
szq8014 2021-12-04 09:03:39 +08:00
|
11
Juszoe 2021-12-04 09:59:33 +08:00
@unco020511 #7 是每两个转成 16 进制,你既然读懂了写成 java 不是难事吧
例如“FA12” -> 0xFA12 |
12
2i2Re2PLMaDnghL 2021-12-05 14:56:05 +08:00
每两个字符被当作 Hex 转成 byte
"3132333435363738" -> b"12345678" |