我希望能够获取任意字符串,通过散列函数(如MD5)运行它,然后在base-36中解释生成的摘要。
我知道Ruby中已经存在一个Digest库,但据我所知,我无法获得摘要的原始字节; to_s
函数映射到hexdigest
,当然,它是base-16。
答案 0 :(得分:20)
Fixnum#to_s接受一个base作为参数。字符串#to_i也是如此。因此,您可以从base-16字符串转换为int,然后转换为base 36 string:
i = hexstring.to_i(16)
base_36 = i.to_s(36)
答案 1 :(得分:3)
您可以使用Digest::Class#digest:
访问原始摘要字节Digest::SHA1.digest("test")
# => "\xA9J\x8F\xE5\xCC\xB1\x9B\xA6\x1CL\bs\xD3\x91\xE9\x87\x98/\xBB\xD3"
不幸的是,从那时起我不知道如何在不首先通过另一个数字基础进入base36,就像在Sammy Larbi的答案中那样......
bytes = Digest::SHA1.digest("test")
Digest.hexencode(bytes).to_i(16).to_s(36)
希望您能找到更好的方法从原始字节转到base36。