
楼主确实没接触过 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 总感觉这 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" |