Хеширование пароля Unicode

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

Это обоснованное беспокойство, или все будет в порядке?

6
задан Hank 16 November 2010 в 15:52
поделиться