Python与Javascript MD5在数量上有所不同

时间:2019-01-23 21:55:54

标签: javascript python md5 modulo

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

1 个答案:

答案 0 :(得分:0)

这是我发现的解决方案,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