Я хочу создать 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) может быть полезным в вашем случае - как типичные ly один использует такую функцию для получения ключей из кодовой фразы –
У вас, похоже, есть путаница в отношении бит против байтов. Хэш SHA1 составляет 160 бит. 'hexdigest' возвращает представление [hexadecimal] (https://en.wikipedia.org/wiki/Hexadecimal) этих битов. Каждая шестнадцатеричная цифра представляет 4 бита, поэтому, когда вы берете первые 32 символа, вы получаете 32 × 4 = 128 бит. Во всяком случае, да, есть, безусловно, лучший подход, но сначала мы должны знать, какую проблему вы пытаетесь решить. Вы хотите создать «ключ шифрования», но с какой целью? Что вы шифруете и как вы его шифруете? Почему 32 бита (* очень * короткий для ключа шифрования)? –
Как насчет изменения вопроса? «32-битная строка» и «длина строки 32 символа» - это две разные вещи. – lcguida