我想创建一个32位字符串,我可以将其用作加密密钥。该字符串/键应该从纯文本字符串派生,例如:
'I am a string'
我的方法首先是哈希:
hashed_string = Digest::SHA1.hexdigest('I am a string') # => 'bd82fb0e81ee9f15f5929e0564093bc9f8015f1d'
然后只使用前32个字符:
hashed_string[0..31] # => 'bd82fb0e81ee9f15f5929e0564093bc9'
然而,我觉得必须有一个更好的方法,我不确定我是否冒险让2个输入字符串产生类似的密钥。
什么是更好的方法?我看到this post触及了截断,但无法找到对我有吸引力的答案。
答案 0 :(得分:2)
如果你想要一个32位的字符串(弱)密码:
Digest::SHA1.digest('I am a string').unpack('B32').first
#=> "10111101100000101111101100001110"
同样数量的信息也可以用8个十六进制数字显示:
Digest::SHA1.hexdigest('I am a string')[0,8]
#=> "bd82fb0e"
或4 ascii chars:
Digest::SHA1.digest('I am a string')[0,4]
#=> "\xBD\x82\xFB\x0E"