10

任意の文字列を取得し、それをハッシュ関数(MD5など)で実行して、結果のダイジェストをbase-36で解釈できるようにしたいと思います。

Rubyにはすでにダイジェストライブラリが存在することは知っていますが、私が知る限り、ダイジェストの生のバイトを取得することはできません。to_s関数は、もちろんベース16であるにマップされますhexdigest

4

2 に答える 2

22

Fixnum#to_sは、引数としてベースを受け入れます。string#to_iもそうです。このため、16進数の文字列からintに変換してから、36進数の文字列に変換できます。

i = hexstring.to_i(16)
base_36 = i.to_s(36)
于 2011-03-23T23:54:46.100 に答える
3

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)

うまくいけば、rawバイトからbase36に移行するためのより良い方法を見つけることができます。

于 2011-06-06T03:59:08.263 に答える