Có rất nhiều nhà cung cấp băm trong .NET tạo các băm mật mã - điều này làm hài lòng tình trạng của bạn rằng chúng là duy nhất (đối với hầu hết các mục đích chống va chạm). Họ là tất cả cực kỳ nhanh chóng và băm chắc chắn sẽ không phải là nút cổ chai trong ứng dụng của bạn trừ khi bạn đang làm nó một nghìn lần hơn.
Cá nhân tôi thích SHA1:
string hash;
using(SHA1CryptoServiceProvider sha1 = new SHA1CryptoServiceProvider())
{
hash = Convert.ToBase64String(sha1.ComputeHash(byteArray));
}
Ngay cả khi người ta nói một phương pháp có thể chậm hơn so với khác, đó là tất cả trong điều kiện tương đối. Một chương trình xử lý ảnh chắc chắn sẽ không nhận thấy quá trình micro giây tạo ra hashsum.
Và liên quan đến va chạm, vì hầu hết các mục đích, điều này cũng không liên quan. Ngay cả các phương thức "lỗi thời" như MD5 vẫn rất hữu ích trong hầu hết các tình huống. Chỉ khuyên bạn không nên sử dụng nó khi bảo mật hệ thống của bạn dựa trên để tránh xung đột.
Nguồn
2009-04-29 01:01:15
Rex I ' m chắc chắn bạn nhận thức được điều này, nhưng như @AdamRobinson lưu ý, không có băm (bao gồm cả băm mật mã .NET chẳng hạn như SHA1) có thể đảm bảo tính duy nhất, miễn là băm là một bản đồ nhiều người, ví dụ nếu có ít ha shcodes hơn đầu vào có thể. – Spike0xff
@ Spike0xff trong phần mềm khi chúng ta nói "duy nhất", nó được hiểu là có nghĩa là "duy nhất đủ". Tôi không thấy bất kỳ dấu hiệu nào cho thấy bất kỳ ai trong chủ đề này đều nhầm lẫn về điều đó. –
Mối quan tâm của tôi không chỉ với những người đăng bài, mà với tất cả những người đọc, và tôi không nghĩ bạn nhất thiết sẽ thấy bất kỳ dấu hiệu nào nếu họ bối rối. Và tôi nghĩ bạn có nghĩa là "Tôi hy vọng nó sẽ được hiểu là có nghĩa là" bởi vì đó không phải là định nghĩa trong từ điển, cũng không phải là cách tôi muốn nói hay hiểu nó. Có lẽ bạn có thể trích dẫn một nguồn có uy tín? – Spike0xff