我想能够取任意字符串,通过哈希函数(如MD5)运行它,然后将结果摘要转换为36进制。
我知道Ruby中已经存在一个Digest库,但据我所知,我无法获取摘要的原始字节;to_s
函数映射到hexdigest
,当然是16进制。
Fixnum#to_s接受一个基数作为参数。string#to_i也是如此。因此,您可以将基于16进制的字符串转换为int,然后再转换为基于36进制的字符串:
i = hexstring.to_i(16)
base_36 = i.to_s(36)
您可以使用Digest::Class#digest访问原始摘要字节:
Digest::SHA1.digest("test")
# => "\xA9J\x8F\xE5\xCC\xB1\x9B\xA6\x1CL\bs\xD3\x91\xE9\x87\x98/\xBB\xD3"
很不幸,从这一点出发我不确定如何将它转换为36进制,除非先通过像Sammy Larbi的答案中所述的另一个数字进制。
bytes = Digest::SHA1.digest("test")
Digest.hexencode(bytes).to_i(16).to_s(36)
希望您能找到更好的方法将原始字节转换为base36。