Как усечь хеш-строку 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"
Другие вопросы по тегам