我希望能夠採取任意字符串,通過散列函數(如MD5)運行它,然後解釋base-36中產生的摘要。摘要的基數-36表示
我知道Ruby中已經存在一個Digest庫,但據我所知,我無法獲取摘要的原始字節; to_s
函數映射到hexdigest
,當然這是基數爲16。
我希望能夠採取任意字符串,通過散列函數(如MD5)運行它,然後解釋base-36中產生的摘要。摘要的基數-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"
從
不幸點我不知道如何得到它變成base36不通過另一個號碼基地薩米·拉爾的回答首先要像..
bytes = Digest::SHA1.digest("test")
Digest.hexencode(bytes).to_i(16).to_s(36)
希望你可以找到一個更好的辦法從原料BYT去es基地36。
工程太棒了!但是是否有可能以某種方式提取摘要對象的原始字節? – 2011-03-24 00:14:20
沒有內置的,我知道的,但這個問題/答案顯示如何將Fixnum或Bignum轉換爲2的補碼字節數組:http://stackoverflow.com/questions/5284369/ruby-return-byte-array-包含二進制補碼錶示的bignum-fix – 2011-03-24 12:01:33
供將來參考;看到我的答案(目前在這個下面)來獲取摘要的原始字節。 – 2011-12-22 04:40:00