Tôi đang viết một thủ tục muối mật khẩu/băm cho các ứng dụng .NET của tôi, chủ yếu sau đây hướng dẫn của bài viết này: http://www.aspheute.com/english/20040105.aspHash trên Unicode Mật khẩu
Về cơ bản mã để tính băm ướp muối là thế này:
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);
}
Tuy nhiên, tôi muốn cho phép người dùng sử dụng ký tự Unicode trong mật khẩu của họ, nếu thích. (Điều này có vẻ như là một ý tưởng hay; ai có thể nghĩ ra một lý do nào đó không?)
Tuy nhiên, tôi không biết cách Unicode hoạt động, và tôi lo lắng nếu tôi thay đổi cả hai tham chiếu System.Text.Encoding.ASCII
thành System.Text.Encoding.Unicode
, thuật toán băm có thể tạo ra một số kết hợp byte không tạo thành các ký tự Unicode hợp lệ và lệnh gọi GetString sẽ không hoạt động.
Đây có phải là mối quan tâm hợp lệ hay không?
Điểm tốt. Vấn đề không liên quan đến việc thực thi Unicode. Việc triển khai ASCII hiện tại cũng không đúng. –
Cảm ơn bạn đã nhận xét sâu sắc này về mã hóa ASCII. Điều này nhắc tôi nhớ đến bài đăng của Eric Lippert, đạo đức trong đó là "không sử dụng một hệ thống mật mã mà bạn không hiểu rõ" (http://blogs.msdn.com/b/ericlippert/archive/2009/12/ 14/use-the-right-tool-for-the-job.aspx). P.S. - Chỉ cần nhận được C# của tôi trong ebook 2 chiều, mong được dành chút thời gian với nó! –