Digest :: SHA2.hexdigest генерирует два совершенно разных значения из одинаковых параметров - PullRequest
1 голос
/ 27 апреля 2011

Это один из самых странных, что я видел. Я поддерживаю устаревший код, который генерирует дайджест:

require 'digest/sha1'
def encrypt(password, salt)
  Digest::SHA2.hexdigest("--#{salt}--#{password}--")
end

Я вызываю этот метод с "привет" и "мир" в качестве параметров, и я получаю это:

15ea8ac62708f3810b720b25dd6febe9d0ddc1ed

Но если я сделаю это напрямую:

Digest::SHA2.hexdigest("--world--hello--")

Я получаю:

c95b3d8968d8044c42ff650ade81315ab9adf120e2b62a637e64fa362cb828dd

Извините, мой французский, но WTF?!

Есть ли какая-то настройка для Digest::SHA2, которую я должен искать? Что может вызвать неравенство?

1 Ответ

26 голосов
/ 27 апреля 2011

Я думаю, что ваш первый код на самом деле:

def encrypt(password, salt)
  Digest::SHA1.hexdigest("--#{salt}--#{password}--")
end

... потому что:

irb> Digest::SHA1.hexdigest '--world--hello--'
#=> "15ea8ac62708f3810b720b25dd6febe9d0ddc1ed"
irb> Digest::SHA2.hexdigest '--world--hello--'
#=> "c95b3d8968d8044c42ff650ade81315ab9adf120e2b62a637e64fa362cb828dd"

Так что, возможно, код, который вы задали в своем вопросе, не тот код, который на самом делев вашем приложении, или кто-то другой переопределяет encrypt точно таким же образом, но используя SHA1, или вы внесли изменения в код, но все еще используете старый / кэшированный код, не осознавая этого.

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