Python vs Javascript 大数字的 MD5 不同
Python vs Javascript MD5 different for big numbers
我在Python中有以下代码:
port_name = 'test-PR-2092'
print int(hashlib.md5(port_name).hexdigest(), 16) % 10000
// 353
在 Javascript 中,我正在使用加密库尝试做同样的事情(我无法控制 python 代码,所以我需要保持不变):
parseInt(
crypto
.createHash('md5')
.update('test-PR-2092')
.digest('hex'),
16
) % 10000
// 4160
Javascript 产生了截然不同的结果。
看看整数,它们非常相似,只是 Javascript 是科学记数法。
Python: 158458604564589336383831436621974090353
Javascript: 1.5845860456458934e+38
有人知道这种差异是从哪里来的吗?
编辑:解决了我自己的问题,而不是重复的,因为在我看到的任何问题中都没有人推荐 BigInteger
这是我找到的解决方案,BigInteger可以直接取一个十六进制值而不是先转换成一个整数。
const portHash = BigInteger(
crypto
.createHash('md5')
.update('test-PR-2092')
.digest('hex'),
16
)
.mod(10000)
.valueOf();
// 353
答案现在与 python 相同。
我在Python中有以下代码:
port_name = 'test-PR-2092'
print int(hashlib.md5(port_name).hexdigest(), 16) % 10000
// 353
在 Javascript 中,我正在使用加密库尝试做同样的事情(我无法控制 python 代码,所以我需要保持不变):
parseInt(
crypto
.createHash('md5')
.update('test-PR-2092')
.digest('hex'),
16
) % 10000
// 4160
Javascript 产生了截然不同的结果。
看看整数,它们非常相似,只是 Javascript 是科学记数法。
Python: 158458604564589336383831436621974090353
Javascript: 1.5845860456458934e+38
有人知道这种差异是从哪里来的吗?
编辑:解决了我自己的问题,而不是重复的,因为在我看到的任何问题中都没有人推荐 BigInteger
这是我找到的解决方案,BigInteger可以直接取一个十六进制值而不是先转换成一个整数。
const portHash = BigInteger(
crypto
.createHash('md5')
.update('test-PR-2092')
.digest('hex'),
16
)
.mod(10000)
.valueOf();
// 353
答案现在与 python 相同。