1
我想創建一個32位字符串,我可以將其用作加密密鑰。此字符串/關鍵應該從一個純文本字符串中獲得,如:如何將SHA1散列字符串截斷爲32位字符串
'I am a string'
我的做法首先是哈希吧:
hashed_string = Digest::SHA1.hexdigest('I am a string') # => 'bd82fb0e81ee9f15f5929e0564093bc9f8015f1d'
然後到只使用前32個字符:
hashed_string[0..31] # => 'bd82fb0e81ee9f15f5929e0564093bc9'
但是,我覺得必須有更好的方法,而且我不確定是否有風險,即2個輸入字符串最終導致類似的鍵。
什麼是更好的方法?我看到this post涉及截斷,但無法找到在那裏吸引我的答案。
寶石[pbkdf2](https://github.com/emerose/pbkdf2-ruby)可以用於你的情況 - 作爲典型一個人使用這樣的函數從密碼中導出密鑰 –
您似乎對位和字節有些混淆。 SHA1哈希值是160位。 'hexdigest'返回這些位的[十六進制](https://en.wikipedia.org/wiki/Hexadecimal)表示。每個十六進制數字代表4位,所以當你取前32個字符時,你會得到32×4 = 128位。無論如何,是的,肯定有更好的方法 - 但首先我們必須知道你想要解決什麼問題。你想生成一個「加密密鑰」,但爲了什麼目的?你在加密什麼,你如何加密它?爲什麼32位(*非常短的加密密鑰)? –
如何改變問題? '32位字符串'和'32個字符長度字符串'是兩個不同的東西。 – lcguida