10

这是我的代码

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

结果nhB9nTcrtoJr2B01QqQZ1g==(在 Mac OS X 上)。

我正在尝试从 ios 应用程序生成相同的签名。目标 c 中的结果与在线转换器站点中的结果相同:字符串

The quick brown fox jumps over the lazy dog

转换为md5,我得到 9e107d9d372bb6826bd81d3542a419d6

而这个的base64OWUxMDdkOWQzNzJiYjY4MjZiZDgxZDM1NDJhNDE5ZDY=

为什么这些字符串不同?这不是 nodejs 加密模块在做什么吗?用 base64 消化 md5 哈希的 nodejs 算法的等价物是什么?

4

1 回答 1

17

该字符串OWUxMDdkOWQzNzJiYjY4MjZiZDgxZDM1NDJhNDE5ZDY=是字符串的 base64 编码版本,9e107d9d372bb6826bd81d3542a419d6它本身就是纯文本字符串的 md5 哈希The quick brown fox jumps over the lazy dog

如果您想在节点中执行此操作,您首先必须以十六进制获取 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');
于 2013-01-17T22:11:53.023 回答