有没有人知道如何在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"
答案 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"))