我希望能够获取任意字符串,通过散列函数(如 MD5)运行它,然后以 base-36 解释生成的摘要。
我知道 Ruby 中已经存在一个 Digest 库,但据我所知,我无法获取摘要的原始字节;该to_s
函数被映射到hexdigest
,当然是base-16。
Fixnum#to_s 接受一个基数作为参数。string#to_i 也是如此。因此,您可以将 base-16 字符串转换为 int,然后再转换为 base 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"
不幸的是,从那时起,我不确定如何在不先通过另一个数字基数(如 Sammy Larbi 的答案)的情况下将其放入 base36 中。
bytes = Digest::SHA1.digest("test")
Digest.hexencode(bytes).to_i(16).to_s(36)
希望您能找到从原始字节到 base36 的更好方法。