计算UTF-8编码字符串的MD5

时间:2010-01-13 15:30:37

标签: c# ruby md5

有没有人知道如何在Ruby中重现这个C#算法?

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();

在将密码转换为UTF-8后计算密码的MD5哈希值。 散列表示为32个十六进制数字的序列,例如“E4D909C290D0FB1CA068FFADDF22CBD0”。

示例:

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

2 个答案:

答案 0 :(得分:4)

也许你需要的只是Digest :: MD5,它会产生你给它的任何字符串的hexdigest。虽然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 :(得分:1)

你需要这样的东西

require 'digest/md5'
Digest::MD5.hexdigest(password.encode("UTF-8"))