我希望创建一个32位的字符串作为加密密钥。这个字符串/密钥应该从一个明文字符串中派生,例如:
然而,我感觉必须有更好的方法,但我不确定是否存在两个输入字符串产生相似密钥的风险。
什么是更好的方法?我看到了this post,它提到了截断,但我在那里找不到满意的答案。
'I am a string'
我的方法首先是将其哈希:
hashed_string = Digest::SHA1.hexdigest('I am a string') # => 'bd82fb0e81ee9f15f5929e0564093bc9f8015f1d'
然后只使用前32个字符:
hashed_string[0..31] # => 'bd82fb0e81ee9f15f5929e0564093bc9'
然而,我感觉必须有更好的方法,但我不确定是否存在两个输入字符串产生相似密钥的风险。
什么是更好的方法?我看到了this post,它提到了截断,但我在那里找不到满意的答案。
hexdigest
返回这些比特的十六进制表示。每个十六进制数字代表4比特,因此当你取前32个字符时,你得到了32×4=128比特。无论如何,是的,肯定有更好的方法,但首先我们必须知道你要解决什么问题。你想生成一个“加密密钥”,但是为了什么目的?你正在加密什么以及你如何加密它?为什么只有32比特(对于一个加密密钥来说非常短)? - Jordan Running