【问题标题】:Python vs Javascript MD5 different for big numbersPython vs Javascript MD5 对于大数字不同
【发布时间】:2019-01-23 21:55:53
【问题描述】:

我在 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

【问题讨论】:

标签: javascript python md5 modulo


【解决方案1】:

这是我找到的解决方案,BigInteger 可以直接取一个十六进制值,而不是先转换为一个 int。

const portHash = BigInteger(
    crypto
      .createHash('md5')
      .update('test-PR-2092')
      .digest('hex'),
    16
  )
    .mod(10000)
    .valueOf();
// 353

答案现在和python一样。

这里是图书馆:https://www.npmjs.com/package/big-integer

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-20
    相关资源
    最近更新 更多