2015-07-01 11 views
6

Nếu tôi băm chuỗi "mật khẩu" trong C# sử dụng SHA256 bằng cách sử dụng phương pháp dưới đây tôi có được điều này là đầu ra của tôi:SHA256 hash của String trong C# không đồng ý với băm trên trang web

e201065d0554652615c320c00a1d5bc8edca469d72c2790e24152d0c1e2b6189 

Nhưng this website(SHA-256 produces a 256-bit (32-byte) hash value) nói với tôi the has is:

5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8 

Tôi đang gặp sự cố về định dạng dữ liệu hoặc nội dung tương tự. Bất kỳ ý tưởng nào tại sao phương pháp C# SHA256Managed này lại trả về một cái gì đó khác? Tôi đang gửi phương thức "mật khẩu" làm thông số đầu vào.

private static string CalculateSHA256Hash(string text) 
    { 
     UnicodeEncoding UE = new UnicodeEncoding(); 
     byte[] hashValue; 
     byte[] message = UE.GetBytes(text); 

     SHA256Managed hashString = new SHA256Managed(); 
     string hex = ""; 

     hashValue = hashString.ComputeHash(message); 
     foreach (byte x in hashValue) 
     { 
      hex += String.Format("{0:x2}", x); 
     } 
     return hex; 
    } 
+2

Vui lòng không sử dụng hàm băm SHA256 để lưu trữ mật khẩu (giả sử bạn đang thiết kế này từ đầu). Vui lòng đọc kỹ các phương pháp lưu trữ mật khẩu hiện đại, bạn nên sử dụng một cái gì đó như thế này: https://msdn.microsoft.com/en-us/library/system.security.cryptography.rfc2898derivebytes(v=vs.110).aspx hoặc một số phương thức đa vòng lặp khác. – willaien

+1

Cảm ơn bạn đã liên kết. Chúng tôi đang sử dụng SHA256, chương trình phụ trợ là việc đánh dấu duy nhất cho người dùng và chúng tôi không phải là băm đôi. Có vẻ như một cải tiến mà chúng ta có thể thực hiện là sử dụng PBKDF2 thay vì SHA256. – LampShade

Trả lời

13

UnicodeEncoding là UTF-16, được bảo đảm để thổi phồng tất cả các nhân vật của bạn để 2-4 byte để biểu diễn điểm mã Unicode của họ (xem thêm phần chú thích trên MSDN).

Sử dụng (tĩnh) Encoding.UTF8 thay vào đó, vì vậy hầu hết các ký tự sẽ vừa với một byte. Nó phụ thuộc vào hệ thống nào bạn cần để bắt chước liệu hệ thống đó có hoạt động cho tất cả các chuỗi không.

+0

Đó là nó, cảm ơn! – LampShade

Các vấn đề liên quan