我一直在寻找一种快速哈希算法,遇到了xxHash,效果很好。唯一的问题是我需要跨多种语言使用这种散列,目前是Java + JavaScript。 xxHash绑定似乎在不同语言中生成不同的值,所以我猜它不可移植?
什么是与语言无关的哈希算法?我之前的一个例子是MD5,但与Murmur/Farmhash/xxHash
相比,它的速度非常慢。正如这里的答案所示,有很多便携的但慢算法,例如MD5 - 这就是为什么我已经明确表示快速对我来说很重要。
请注意,我不需要任何加密,我正在为唯一性而烦恼。
修改:
我不相信这是偏离主题并征求意见;我想要坚实的基准测试证明算法很快,我要求一种语言无关的算法,这两种算法都将意见作为有效的信息来源。
答案 0 :(得分:2)
如果您使用的是nodejs,我建议您使用具有本机支持的节点。您将从这些实现的未来更新中受益。
列表在这里:https://nodejs.org/api/crypto.html
它们是非常标准的算法,所以你几乎可以在任何编程语言中找到它,比如java或c。
在节点中,您可以调用require('crypto').getHashes()
并查看支持的哈希列表。
我在电脑上运行它,结果是:
[ 'DSA',
'DSA-SHA',
'DSA-SHA1',
'DSA-SHA1-old',
'RSA-MD4',
'RSA-MD5',
'RSA-MDC2',
'RSA-RIPEMD160',
'RSA-SHA',
'RSA-SHA1',
'RSA-SHA1-2',
'RSA-SHA224',
'RSA-SHA256',
'RSA-SHA384',
'RSA-SHA512',
'dsaEncryption',
'dsaWithSHA',
'dsaWithSHA1',
'dss1',
'ecdsa-with-SHA1',
'md4',
'md4WithRSAEncryption',
'md5',
'md5WithRSAEncryption',
'mdc2',
'mdc2WithRSA',
'ripemd',
'ripemd160',
'ripemd160WithRSA',
'rmd160',
'sha',
'sha1',
'sha1WithRSAEncryption',
'sha224',
'sha224WithRSAEncryption',
'sha256',
'sha256WithRSAEncryption',
'sha384',
'sha384WithRSAEncryption',
'sha512',
'sha512WithRSAEncryption',
'shaWithRSAEncryption',
'ssl2-md5',
'ssl3-md5',
'ssl3-sha1',
'whirlpool' ]
我正在使用节点v4.2.1。
您也可以使用cryptojs。 cryptojs支持的哈希算法列表如下:https://code.google.com/p/crypto-js/#The_Hasher_Algorithms