2011-02-09 3 views
2

Я переписываю веб-приложение Rails в C#. Я действительно застрял с хэш-функции в Ruby:Как преобразовать Ruby's SHA512.hexdigest в C#?

# Generates a 128 character hash 
def Password.hash(password,salt) 
    Digest::SHA512.hexdigest("#{password}:#{salt}") 
end 

Следующая C# функция дает другой результат:

private static string Hash(string password, string salt) 
{ 
    return BitConverter.ToString(new SHA512CryptoServiceProvider().ComputeHash(Encoding.UTF8.GetBytes(password + ":" + salt))).Replace("-", "").ToLower(); 
} 

Что я делаю неправильно?

Спасибо

+2

Как выглядят результаты в каждом случае? Использует ли Ruby UTF-8? –

ответ

6

Ничего. Фактически результаты ARE такие же. Так что если вы когда-нибудь нужно преобразовать хеширование в Ruby на C#,

Digest::SHA512.hexdigest(some_string) 

делает то же самое, как

BitConverter.ToString(new SHA512CryptoServiceProvider().ComputeHash(Encoding.UTF8.GetBytes(someString))).Replace("-", "").ToLower(); 

C# является гораздо более многословен, но самое главное, что это работает! :)

+0

Awesome. То же самое справедливо для его кузена в Python. – leon

Смежные вопросы