V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
unco020511
V2EX  ›  程序员

这段 Python 代码用 Java 怎么实现

  •  
  •   unco020511 · 2021-12-03 18:11:31 +08:00 · 2805 次点击
    这是一个创建于 1086 天前的主题,其中的信息可能已经有所发展或是发生改变。

    楼主确实没接触过 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
    
    12 条回复    2021-12-05 14:56:05 +08:00
    szq8014
        1
    szq8014  
       2021-12-03 18:18:36 +08:00
    org.apache.commons.codec.digest.DigestUtils.sha512Hex(code + challenge) ?
    pcbl
        2
    pcbl  
       2021-12-03 18:21:53 +08:00 via Android   ❤️ 2
    总感觉这 python 代码写的没有 python 味
    yangyaofei
        3
    yangyaofei  
       2021-12-03 18:44:23 +08:00
    一般 Python 程序猿肯定不会写这种 hash......

    c/c++ 的倒是有可能
    yanbo92
        4
    yanbo92  
       2021-12-03 19:13:26 +08:00 via iPhone
    sha512b 第一眼会忽略 512
    unco020511
        5
    unco020511  
    OP
       2021-12-03 20:07:25 +08:00
    @yangyaofei #这是抓的某个国外 app 的包,不是自己写的
    Juszoe
        6
    Juszoe  
       2021-12-03 22:21:34 +08:00
    这段代码逻辑挺简单的,一楼是正解。
    核心思想就是 sha512(code + challenge)
    unco020511
        7
    unco020511  
    OP
       2021-12-03 23:28:38 +08:00
    @szq8014 好像还是不太一样,我看上面代码不是做了什么每两个转一个 16 进制吗
    gleox
        8
    gleox  
       2021-12-04 00:35:17 +08:00
    to_byte_array()函数是把 16 进制字符串转换为 byte 数组。一个字节编码时对应的是 2 个 16 进制字符,所以解码 16 进制字符串的时候会截取 2 个字符转换为 1 个字节。
    iyaozhen
        9
    iyaozhen  
       2021-12-04 01:46:03 +08:00
    怎么感觉这个 py 代码是 java 转过去的,java 才常操作 byte array
    szq8014
        10
    szq8014  
       2021-12-04 09:03:39 +08:00
    @Juszoe
    @unco020511 里面的 code + challenge 需要再 Hex 转成 byte 一下, sha512 也支持直接传入 byte[]
    Juszoe
        11
    Juszoe  
       2021-12-04 09:59:33 +08:00
    @unco020511 #7 是每两个转成 16 进制,你既然读懂了写成 java 不是难事吧
    例如“FA12” -> 0xFA12
    2i2Re2PLMaDnghL
        12
    2i2Re2PLMaDnghL  
       2021-12-05 14:56:05 +08:00
    每两个字符被当作 Hex 转成 byte
    "3132333435363738" -> b"12345678"
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2707 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 12:02 · PVG 20:02 · LAX 04:02 · JFK 07:02
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.