包含超过16个字符的哈希代码?

时间:2017-01-22 20:34:39

标签: javascript ruby hash md5 base

我想在我的网页上应用哈希码解决方案,它比MD5和SHA-1更紧凑,因为我想将它们用作JSON哈希表中的键。

或等效:如何将十六进制MD5哈希值转换为更高的基数系统?越高越好,直到单词可以用作JSON哈希中的键。例如,而不是:

"684591beaa2c8e2438be48524f555141" hexadecimal MD5 hash I would prefer "668e15r60463kya64xq7umloh" which is a base 36 number and the values are equal.

我在Ruby中进行了计算:

"684591beaa2c8e2438be48524f555141".to_i(16).to_s(36)
=> 668e15r60463kya64xq7umloh

因为它处理十六进制MD5哈希的大十进制值(138600936100279876740703998180777611585)

与JavaScript不同,在JavaScript中我得到一个浮点值,它是四舍五入的。因此,对于不同的MD5哈希值,我得到相同的36个基值。

1 个答案:

答案 0 :(得分:0)

红宝石

您可以直接返回base64digest

require 'digest'

Digest::MD5.hexdigest 'your_page'
#=> "a6b580481008e60df9350de170b7e728"

p Digest::MD5.base64digest 'your_page'
#=> "prWASBAI5g35NQ3hcLfnKA=="

的Javascript

如果您已有十六进制字符串,则此previous answer的评论似乎可以正常工作:

btoa("a6b580481008e60df9350de170b7e728".match(/\w{2}/g).map(function(a){return String.fromCharCode(parseInt(a, 16));} ).join(""))
#=> "prWASBAI5g35NQ3hcLfnKA=="