2013-06-08 30 views
20

Tôi có một số chuỗi và tôi muốn băm nó bằng hàm băm SHA-256 sử dụng C#. Tôi muốn một cái gì đó như thế này:Lấy chuỗi SHA-256 của một chuỗi

string hashString = sha256_hash("samplestring"); 

Có gì đó được xây dựng trong khung làm việc này không?

+1

http://msdn.microsoft.com/en-us/library/system.security.cryptography.sha256.aspx. -1. –

+2

Hashes hoạt động trên byte chứ không phải chuỗi. Vì vậy, trước tiên bạn cần phải chọn một mã hóa biến đổi chuỗi thành byte. Tôi khuyên bạn nên sử dụng UTF-8 cho việc này. – CodesInChaos

+0

Điều gì đó cho tôi biết rằng mọi người đọc bài đăng này cũng nên kiểm tra: https://stackoverflow.com/questions/4948322/fundamental-difference-between-hashing-and-encryption-algorithms – Ziezi

Trả lời

65

Việc thực hiện có thể là như thế

public static String sha256_hash(String value) { 
    StringBuilder Sb = new StringBuilder(); 

    using (SHA256 hash = SHA256Managed.Create()) { 
    Encoding enc = Encoding.UTF8; 
    Byte[] result = hash.ComputeHash(enc.GetBytes(value)); 

    foreach (Byte b in result) 
     Sb.Append(b.ToString("x2")); 
    } 

    return Sb.ToString(); 
} 

Edit:LINQ thực hiện là hơn súc tích, nhưng, có lẽ, ít có thể đọc:

public static String sha256_hash(String value) { 
    using (SHA256 hash = SHA256Managed.Create()) { 
    return String.Concat(hash 
     .ComputeHash(Encoding.UTF8.GetBytes(value)) 
     .Select(item => item.ToString("x2"))); 
    } 
} 

Chỉnh sửa 2 : .NET Core

public static String sha256_hash(string value) 
{ 
    StringBuilder Sb = new StringBuilder(); 

    using (var hash = SHA256.Create())    
    { 
     Encoding enc = Encoding.UTF8; 
     Byte[] result = hash.ComputeHash(enc.GetBytes(value)); 

     foreach (Byte b in result) 
      Sb.Append(b.ToString("x2")); 
    } 

    return Sb.ToString(); 
} 
+0

cách bạn giải mã băm trở lại mật khẩu? –

+6

@daniel metlitski: bạn * không thể *: hàm băm * chức năng một chiều *, bạn có thể tính toán băm nhưng không thể lấy lại đối số. Khi đăng ký một người dùng mới, lưu trữ không phải mật khẩu mà là mật khẩu của nó; về xác thực, tính toán băm trên mật khẩu được cung cấp và so sánh băm với băm được lưu trữ. –

+0

Tất cả đều mát mẻ, nhưng quy ước đặt tên của bạn là khủng khiếp - các biến cục bộ chữ hoa, tên phương thức viết thường - đây là một bài giảng tốt cho một buổi tối: https://docs.microsoft.com/en-us/dotnet/standard/design- hướng dẫn/quy ước đặt tên chung –

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