楼主确实没接触过 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 月 3 日
org.apache.commons.codec.digest.DigestUtils.sha512Hex(code + challenge) ?
|
2
pcbl 2021 年 12 月 3 日 via Android 总感觉这 python 代码写的没有 python 味
|
3
yangyaofei 2021 年 12 月 3 日
一般 Python 程序猿肯定不会写这种 hash......
c/c++ 的倒是有可能 |
4
yanbo92 2021 年 12 月 3 日 via iPhone
sha512b 第一眼会忽略 512
|
5
unco020511 OP @yangyaofei #这是抓的某个国外 app 的包,不是自己写的
|
6
Juszoe 2021 年 12 月 3 日
这段代码逻辑挺简单的,一楼是正解。
核心思想就是 sha512(code + challenge) |
7
unco020511 OP @szq8014 好像还是不太一样,我看上面代码不是做了什么每两个转一个 16 进制吗
|
8
gleox 2021 年 12 月 4 日
to_byte_array()函数是把 16 进制字符串转换为 byte 数组。一个字节编码时对应的是 2 个 16 进制字符,所以解码 16 进制字符串的时候会截取 2 个字符转换为 1 个字节。
|
9
iyaozhen 2021 年 12 月 4 日
怎么感觉这个 py 代码是 java 转过去的,java 才常操作 byte array
|
10
szq8014 2021 年 12 月 4 日
|
11
Juszoe 2021 年 12 月 4 日
@unco020511 #7 是每两个转成 16 进制,你既然读懂了写成 java 不是难事吧
例如“FA12” -> 0xFA12 |
12
2i2Re2PLMaDnghL 2021 年 12 月 5 日
每两个字符被当作 Hex 转成 byte
"3132333435363738" -> b"12345678" |