Хеш-функция .NET - PullRequest
       4

Хеш-функция .NET

2 голосов
/ 07 марта 2011

Я должен написать приложение, которое принимает строковый ввод и вычисляет хеш-значение для строки (максимальное количество символов ввода - 16), вывод должен быть длиной 22 символа (или меньше, но не больше) в формате base64 .

Я вижу, что .NET Framework предлагает много хеш-функций, и я понятия не имею, что использовать, Кто-нибудь может порекомендовать мне, какую функцию лучше использовать, и как я могу ограничить вывод до 22 символов?

Спасибо

Ответы [ 3 ]

6 голосов
/ 07 марта 2011

Вы можете использовать MD5, который дает 128-битный вывод, а затем отбрасывать последние два символа при преобразовании в base64, так как они всегда будут "==" (заполнение). Это должно дать вам 22 символа.

string GetEncodedHash(string password, string salt)
{
   MD5 md5 = new MD5CryptoServiceProvider();
   byte [] digest = md5.ComputeHash(Encoding.UTF8.GetBytes(password + salt);
   string base64digest = Convert.ToBase64String(digest, 0, digest.Length);
   return base64digest.Substring(0, base64digest.Length-2);
}
3 голосов
/ 07 марта 2011

Вы можете использовать любую функцию хеширования и просто обрезать хеш до нужного размера, а затем преобразовать в base-64.В вашем случае вам нужно было бы урезать хеш до 15 байтов, что в итоге составляет 20 байтов от base-64.Я собираюсь повторно использовать мой предыдущий пример.

string secretKey = "MySecretKey";
string salt = "123";
System.Security.Cryptography.SHA1 sha = System.Security.Cryptography.SHA1.Create();
byte[] preHash = System.Text.Encoding.UTF32.GetBytes(secretKey + salt);
byte[] hash = sha.ComputeHash(preHash);
string password = prefix + System.Convert.ToBase64String(hash, 0, 15);
1 голос
/ 07 марта 2011

22 символа base64 означают 16-байтовый вывод вашей хеш-функции; Вы можете использовать любую хеш-функцию, которая выводит 128 бит.

...