Я пишу процедуру соли / хеширования пароля для моего приложения .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 выйдет из себя.
Это обоснованное беспокойство, или все будет в порядке?