Вычисление MD5 строки в кодировке UTF-8 - PullRequest
3 голосов
/ 13 января 2010

Кто-нибудь знает, как воспроизвести этот алгоритм C # на Ruby?

HashAlgorithm algorithm = MD5.Create();
Encoding encoding = new UTF8Encoding();
var sb = new StringBuilder();
foreach (var element in algorithm.ComputeHash(encoding.GetBytes(password)))
{
    sb.Append(element.ToString("X2"));
}
return sb.ToString();

Он вычисляет MD5-хэш пароля после преобразования его в UTF-8. Хеш представлен в виде последовательности из 32 шестнадцатеричных цифр, например, «E4D909C290D0FB1CA068FFADDF22CBD0».

Примеры:

"übergeek" & rarr; "1049165D5C22F27B9545F6B3A0DB07E0"
"Γεια σου" & rarr; "9B2C16CACFE1803F137374A7E96F083F"

Ответы [ 2 ]

4 голосов
/ 13 января 2010

Может быть, все, что вам нужно, это Digest :: MD5, который будет генерировать шестнадцатеричные числа любой строки, которую вы ей дадите. В то время как Ruby 1.8 несколько тонок в своем различии между наборами символов ISO-Latin1 и UTF-8, Ruby 1.9 обеспечивает гораздо больший контроль, включая преобразование. Однако если строка указана как UTF8, Ruby 1.8 обычно оставляет ее в покое, рассматривая ее как простой поток байтов.

require 'digest/md5'

def encode_password(password)
  Digest::MD5.hexdigest(password).upcase
end

# Example:
puts encode_password('foo bar')
# => "327B6F07435811239BC47E1544353273"
1 голос
/ 13 января 2010

Тебе нужно что-то вроде этого

require 'digest/md5'
Digest::MD5.hexdigest(password.encode("UTF-8"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...