Создать хеш из строки, это будет зависеть от ОС? - PullRequest
1 голос
/ 06 апреля 2011

Когда пользователь вводит текст, я хочу создать хеш текста.Я буду хранить этот хэш в БД.

Затем, когда кто-нибудь еще вводит текст, я сгенерирую хэш и сравню его, выполнив поиск в БД для этого значения хеш-функции, если он существует, я знаю, что введенный текст является дубликатом.

Будет ли достаточно метода .hash для этого?Будет ли он постоянным на разных серверах?

bio = "my name is blankman"

bio_hash = bio.hash


b = Bio.new()
b.body = bio

b.save unless Bio.find_by_hash(bio_hash)

Ответы [ 2 ]

5 голосов
/ 06 апреля 2011

Нет, хэширующая функция Ruby не гарантируется согласованной.Если вам нужна согласованная функция хеширования, используйте MD5 или другую, предназначенную для этой цели.

2 голосов
/ 06 апреля 2011

По вопросу Какую хеш-функцию использует Ruby? , Ruby использует Хэш Murmur для своих строк.

Вы можете увидеть реализацию st_hash(в конечном итоге используется String#hash) в источнике, начиная с здесь .Из этой реализации вы можете видеть, что выполнение кода может сильно различаться в зависимости от порядкового номера системы, размера байтов и других факторов.

Моего C-fu недостаточно, чтобы доказать, что одна и та же версия Ruby будет выдавать разные хэши в разных системах, но я, конечно, не чувствую себя комфортно, утверждая, что она создаст такой же хеш.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...