gpt4 book ai didi

java - 在Python中重写Java BigInteger函数

转载 作者:太空宇宙 更新时间:2023-11-04 15:04:07 25 4
gpt4 key购买 nike

我正在尝试在 python 脚本中重写一些java代码。其中一部分是从 sha256 哈希值中推导出一个简单的数字。

在java中这个函数被称为:

public static Long getId(byte[] publicKey) {
byte[] publicKeyHash = Crypto.sha256().digest(publicKey);
BigInteger bigInteger = new BigInteger(1, new byte[] {publicKeyHash[7], publicKeyHash[6], publicKeyHash[5],
publicKeyHash[4], publicKeyHash[3], publicKeyHash[2], publicKeyHash[1], publicKeyHash[0]});
return bigInteger.longValue();
}

公钥是二进制的,所以我无法在这里打印它,但我用于测试的publicKeyHash是:d9d5c57971eefb085e3abaf7a5a4a6cdb8185f30105583cdb09ad8f61886ec65

据我了解,该 Java 代码的第三行将 d9d5c579 转换为数字。属于上面哈希的数字是4273301882745002507

现在我正在寻找一段/行Python代码来从该哈希生成相同的数字。

def getId(publicKey):
publicKeyHash = binascii.hexlify(publicKey)
p = publicKeyHash
return(struct.unpack("Q",struct.pack("cccccccc",p[7],p[6],p[5],p[4],p[3],p[2],p[1],p[0]))[0])

这是第一次尝试,但这显然不起作用,它确实返回一个数字,但不是正确的数字。这里有熟悉这两种语言并且能够帮助我翻译这个函数的人吗?

最佳答案

怎么样(未经测试):

import hashlib
publicKeyHash = hashlib.sha256.digest(publicKey)
bigInt = 0
for byte in publicKeyHash[:7]:
bigInt <<= 8
bigInt |= byte

这有效:

from hashlib import sha256
import json
import struct
import binascii

def getId(publicKey):
publicKeyHash = sha256(publicKey)
p = publicKeyHash.digest()
b = bytearray(p[:8])
b.reverse()
bigInt = 0
for byte in b:
bigInt <<= 8
bigInt |= byte
#print bigInt
return(bigInt)

关于java - 在Python中重写Java BigInteger函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22229320/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com