这是我的代码
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
,
并且 base64 是OWUxMDdkOWQzNzJiYjY4MjZiZDgxZDM1NDJhNDE5ZDY=
。
为什么这些字符串不同?这不是nodejs加密模块正在做的吗? 用于获取用base64消化的md5哈希的nodejs算法的等价物是什么?
答案 0 :(得分:15)
字符串OWUxMDdkOWQzNzJiYjY4MjZiZDgxZDM1NDJhNDE5ZDY=
是字符串9e107d9d372bb6826bd81d3542a419d6
的base64编码版本,它是纯文本字符串The quick brown fox jumps over the lazy dog
的md5哈希值。
如果要在节点中执行此操作,首先必须以十六进制获取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');