Bài này sẽ nói về cách tạo mã hash trên ngôn ngữ lập trình CSharp (C#)

Hàm băm là một hàm toán học chuyển đổi một thông điệp đầu vào có độ dài bất kỳ thành một dãy bit có độ dài cố định (tuỳ thuộc vào thuật toán băm). Dãy bit này được gọi là thông điệp rút gọn (message digest) hay giá trị băm (hash value), đại diện cho thông điệp ban đầu. Hàm băm là hàm một chiều nên không thể tái tạo lại thông điệp ban đầu từ một chuỗi băm có sẵn. Mọi sự thay đổi dù là nhỏ nhất ở thông điệp đầu vào cũng cho ra kết quả là một dãy mã hoàn toàn khác nhau.

Có nhiều hàm băm để tạo mã hash như: MD2, MD4, MD5, SHA 1/256/384/512…..

Khi phát triển 1 ứng dụng mà có yêu cầu lưu trữ tài khoản thì ta không nên lưu mật khẩu ở dạng thô (plain text) mà cần phải Hash để lưu trữ. Giả sử kẻ nào đó có được cơ sở dữ liệu của bạn thì họ cũng khó có thể dịch ngược ra mật khẩu gốc đã lưu trữ. (Tôi nói là “khó” tức là vẫn có thể dịch ngược lại bằng cách “thử”, phương pháp này được gọi là brute-force. Muốn biết phương pháp dịch ngược thì các bạn có thể tra thêm qua anh Gồ)

Giờ là phần code hàm hash:

private string StringToHash(string data, string salt, HashAlgorithm algorithm)
{
    byte[] saltedBytes = Encoding.UTF8.GetBytes(data + salt);     // Combine the data with the salt
    byte[] hashedBytes = algorithm.ComputeHash(saltedBytes);      // Compute the hash value of our input
    return BitConverter.ToString(hashedBytes);
}

Sử dụng:

// Result is b3ede0fa69b68faabcfdee906047533a
string test1 = StringToHash("this is my test string", "salt1", new MD5CryptoServiceProvider()).ToLower().Replace("-", "");

// Result is e95567165e2b9815fb55b96ab04de1a2fb0f5b38
string test2 = StringToHash("this is my test string", "salt2", new RIPEMD160Managed()).ToLower().Replace("-", "");

// Result is 57930f00f573418b21d3a7703d12515ccf691290
string test3 = StringToHash("this is my test string", "salt3", new SHA1CryptoServiceProvider()).ToLower().Replace("-", "");

// Result is 49d6907da3df816167b35c7215a2d26b9d84d7388c8552c30e55d4c19c86f5bb
string test4 = StringToHash("this is my test string", "salt4", new SHA256CryptoServiceProvider()).ToLower().Replace("-", "");

// Result is dcafea354cd439f84d2f1f696091887383f5b1dd5ee049342a3e5944615a46fdff1626ff95405cb31cd45b571548f6bc
string test5 = StringToHash("this is my test string", "salt5", new SHA384CryptoServiceProvider()).ToLower().Replace("-", "");

// Result is 1ab5c1be81a4e3be552dad98306edc3554dd55d83d28b397af61a150351527b2de65cbb3995ad45a36395dab94aaf34155c27894303547e50a485bfdda683c99
string test6 = StringToHash("this is my test string", "salt6", new SHA512CryptoServiceProvider()).ToLower().Replace("-", "");

// Result is 818800f4a59e246e
string test7 = StringToHash("this is my test string", "salt7", new MACTripleDES()).ToLower().Replace("-", "");

Nguồn