javascript - Python vs Javascript MD5 对于大数字不同
问题描述
我在 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 会产生截然不同的结果。
从 int 来看,它们非常相似,只是 Javascript 是科学记数法。
Python: 158458604564589336383831436621974090353
Javascript: 1.5845860456458934e+38
有谁知道这种差异来自哪里?
编辑:解决了我自己的问题,而不是重复的,因为没有人在我见过的任何问题中推荐 BigInteger
解决方案
这是我找到的解决方案,BigInteger 可以直接采用十六进制值,而不是先转换为 int。
const portHash = BigInteger(
crypto
.createHash('md5')
.update('test-PR-2092')
.digest('hex'),
16
)
.mod(10000)
.valueOf();
// 353
答案现在和python一样。
推荐阅读
- php - Uncaught ReferenceError: Echo is not defined (Laravel-echo/pusher)
- java - 如何编写特定的随机数方案?
- .net - Neo4j - 无法连接示例 .NET hello world 程序
- php - 只插入不存在的数据 PHP
- google-static-maps - 如何将多个多边形添加到谷歌静态地图?
- python - 从python中的字符串Grep多个单词
- javascript - 在多个浏览器上测试 CORS 问题的最佳方法是什么?
- assembly - PIC18F97J60 增加 FSR 不影响 INDF
- java - Java Products Method - 多行多列整数乘积
- c# - 如何加入ListQueryable表并返回toList();