Я пишу соль / хэш-процедуру пароля для моего приложения .NET, в основном следуя руководству этой статьи:
http://www.aspheute.com/english/20040105.asp
В основном код для вычисления соленого хэша таков:
public string ComputeSaltedHash(string password, byte[] salt) {
// Get password ASCII text as bytes:
byte[] passwordBytes = System.Text.Encoding.ASCII.GetBytes(password);
// Append the two arrays
byte[] toHash = new byte[passwordBytes.Length + salt.Length];
Array.Copy(passwordBytes, 0, toHash, 0, passwordBytes.Length);
Array.Copy(salt, 0, toHash, passwordBytes.Length, salt.Length);
byte[] computedHash = SHA1.Create().ComputeHash(toHash);
// Return as an ASCII string
return System.Text.Encoding.ASCII.GetString(computedHash);
}
Однако я хочу разрешить пользователям использовать символы Unicode в своем пароле, если они захотят. (Это кажется хорошей идеей; кто-нибудь может придумать причину, по которой это не так?)
Однако я не знаю тонны о том, как работает Unicode, и я беспокоюсь, если я просто изменю обе ссылки с System.Text.Encoding.ASCII
на System.Text.Encoding.Unicode
, алгоритм хеширования может создать некоторые байтовые комбинации, которые не образуются допустимые символы Unicode и вызов GetString будет в шоке.
Это действительная проблема или все будет в порядке?