nodejs md5与base64摘要算法错误的结果

nik*_*avi 9 base64 md5 node.js

这是我的代码

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

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

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

The quick brown fox jumps over the lazy dog

转换为md5,我明白了 9e107d9d372bb6826bd81d3542a419d6,

而这个的基础64OWUxMDdkOWQzNzJiYjY4MjZiZDgxZDM1NDJhNDE5ZDY=.

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

Tho*_*son 15

字符串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');
Run Code Online (Sandbox Code Playgroud)

现在你有md5哈希为hex(9e107d9d372bb6826bd81d3542a419d6).现在你所要做的就是将它转换为base64:

new Buffer(md5).toString('base64');
Run Code Online (Sandbox Code Playgroud)

  • 你不能只使用`.digest().toString('base64')`?顺便说一句,你需要`new Buffer(md5,'hex')`才能正常工作,现在你得到的是十六进制摘要的base64,而不是原始的二进制哈希. (4认同)