这段 Python 代码用 Java 怎么实现

2021-12-03 18:11:31 +08:00
 unco020511

楼主确实没接触过 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
2830 次点击
所在节点    程序员
12 条回复
szq8014
2021-12-03 18:18:36 +08:00
org.apache.commons.codec.digest.DigestUtils.sha512Hex(code + challenge) ?
pcbl
2021-12-03 18:21:53 +08:00
总感觉这 python 代码写的没有 python 味
yangyaofei
2021-12-03 18:44:23 +08:00
一般 Python 程序猿肯定不会写这种 hash......

c/c++ 的倒是有可能
yanbo92
2021-12-03 19:13:26 +08:00
sha512b 第一眼会忽略 512
unco020511
2021-12-03 20:07:25 +08:00
@yangyaofei #这是抓的某个国外 app 的包,不是自己写的
Juszoe
2021-12-03 22:21:34 +08:00
这段代码逻辑挺简单的,一楼是正解。
核心思想就是 sha512(code + challenge)
unco020511
2021-12-03 23:28:38 +08:00
@szq8014 好像还是不太一样,我看上面代码不是做了什么每两个转一个 16 进制吗
gleox
2021-12-04 00:35:17 +08:00
to_byte_array()函数是把 16 进制字符串转换为 byte 数组。一个字节编码时对应的是 2 个 16 进制字符,所以解码 16 进制字符串的时候会截取 2 个字符转换为 1 个字节。
iyaozhen
2021-12-04 01:46:03 +08:00
怎么感觉这个 py 代码是 java 转过去的,java 才常操作 byte array
szq8014
2021-12-04 09:03:39 +08:00
@Juszoe
@unco020511 里面的 code + challenge 需要再 Hex 转成 byte 一下, sha512 也支持直接传入 byte[]
Juszoe
2021-12-04 09:59:33 +08:00
@unco020511 #7 是每两个转成 16 进制,你既然读懂了写成 java 不是难事吧
例如“FA12” -> 0xFA12
2i2Re2PLMaDnghL
2021-12-05 14:56:05 +08:00
每两个字符被当作 Hex 转成 byte
"3132333435363738" -> b"12345678"

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/819866

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX