ruby — Могу ли я создать хэш md5 длиной 8?

#ruby #md5

#ruby #md5

Вопрос:

Возможно ли создать хэш md5 длиной 8 символов?

Комментарии:

1. К вашему СВЕДЕНИЮ: при хэшировании 2000 строк с использованием 8 шестнадцатеричных разрядов вероятность коллизии хэшей составляет 0,047% (~ 1/2000 ).

Ответ №1:

MD5 создает 16-байтовые хэши. Вы, конечно, можете обрезать строку до восьми символов, как в myString[0..7] , но обратите внимание, что это больше не допустимый хэш MD5.

Ответ №2:

 require 'digest'

Digest::MD5.hexdigest("My secret")[0...8]
  

Комментарии:

1. В конечном итоге вы столкнетесь с некоторыми коллизиями, верно? Это как бы сводит на нет использование MD5.

2. Это зависит от того, сколько строк вы хэшируете. Я просто создаю приложение, которому необходимо хэшировать строки для генерации имен файлов, но никогда не будет больше пары тысяч разных строк. В таком случае 8-символьный хэш вряд ли приведет к коллизиям.

Ответ №3:

Я думаю, что md5 имеет общую длину в зависимости от того, что он шифрует, поэтому вы не можете заранее определить длину хэша md5.

Ответ №4:

строка длиной 8 не является допустимым хэшем md5.