PHP中的sha1哈希和西里尔语中的Node.JS的差异

时间:2013-04-24 20:04:25

标签: php node.js sha

如果我尝试从“ABC”获取sha1,那么如果PHP和Node.JS,它们是相同的。

function sha1(input) {
  return crypto.createHash('sha1').update(input).digest('hex');
};

但是,如果我试图像这样采取西里尔字母的哈希:“ЭЮЯЁ”他们不是。

如何解决?

1 个答案:

答案 0 :(得分:4)

问题可能是character set/encodings aren't matching

如果PHP中的字符串是UTF-8编码的,您可以通过指定'utf8'来镜像Node.js中的字符串:

function sha1(input) {
  return crypto.createHash('sha1').update(input, 'utf8').digest('hex');
};
> crypto.createHash('sha1').update('ЭЮЯЁ').digest('hex')
'da7f63ac9a3b5c67c8920871145cb5904f3df29a'
> crypto.createHash('sha1').update('ЭЮЯЁ', 'utf8').digest('hex')
'f78c3521413a8321231e35665f8c4a16550e182a'

'ABC'将有更好的匹配机会,因为这些都是ASCII个字符,ASCII是许多其他字符集的起点。当你超越ASCII时,你会经常遇到冲突。