Node.js使用Base64摘要算法的MD5结果错误

11

这是我的代码

var sig = crypto.createHash('md5')
  .update('The quick brown fox jumps over the lazy dog')
  .digest('base64');
console.log(sig)

在Mac OS X上,nhB9nTcrtoJr2B01QqQZ1g== 是结果。

我正在尝试从iOS应用程序生成相同的签名。在Objective C和在线转换网站中得到的结果相同:该字符串

The quick brown fox jumps over the lazy dog

将其转换为md5后,我得到 9e107d9d372bb6826bd81d3542a419d6

这个字符串的base64OWUxMDdkOWQzNzJiYjY4MjZiZDgxZDM1NDJhNDE5ZDY=

为什么这些字符串不同?难道这不是nodejs加密模块正在做的吗? 在nodejs中获取md5哈希摘要并使用base64的等效算法是什么?


只是为了确保我理解问题。您想要将字符串“The quick brown fox jumps over the lazy dog”的md5哈希编码转换为base64,还是您想要将字符串本身转换为base64? - Thomas Watson
@ThomasWatson,我想要“The quick brown fox…”的md5哈希值的base64编码字符串。 - nikravi
1个回答

17

字符串 OWUxMDdkOWQzNzJiYjY4MjZiZDgxZDM1NDJhNDE5ZDY= 是字符串 The quick brown fox jumps over the lazy dog 的MD5哈希值 9e107d9d372bb6826bd81d3542a419d6 的base64编码。

如果您想在Node中执行此操作,首先必须获取十六进制的MD5哈希值:

var crypto = require('crypto');
var s = 'The quick brown fox jumps over the lazy dog';
var md5 = crypto.createHash('md5').update(s).digest('hex');

现在您已经有了十六进制的md5哈希值(9e107d9d372bb6826bd81d3542a419d6),现在您只需要将其转换为base64:

new Buffer(md5).toString('base64');

7
你可以使用.digest().toString('base64')吗?顺便说一句,为了使其正常工作,你需要使用new Buffer(md5, 'hex')。现在你正在获取十六进制摘要的Base64表示,而不是原始二进制哈希的Base64表示。 - Fluffy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接