Как усечь хеш-строку SHA1 в 32-битную строку
Я хочу создать 32-битную строку, которую я могу использовать в качестве ключа шифрования. Эта строка / ключ должна быть получена из простой текстовой строки, например:
'I am a string'
Мой подход должен был бы сначала хэшировать это:
hashed_string = Digest::SHA1.hexdigest('I am a string') # => 'bd82fb0e81ee9f15f5929e0564093bc9f8015f1d'
А затем использовать только первые 32 символа:
hashed_string[0..31] # => 'bd82fb0e81ee9f15f5929e0564093bc9'
Тем не менее, я чувствую, что должен быть лучший подход, и я не уверен, рискну ли я, что две строки ввода приведут к одинаковым клавишам.
Какой будет лучший подход? Я видел этот пост, который касается усечения, но не могу найти ответ, который мне там нравится.
1 ответ
Если вам нужна строка с 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:
Digest::SHA1.digest('I am a string')[0,4]
#=> "\xBD\x82\xFB\x0E"