Trong bài này, mình sẽ xây dựng những hàm băm SHA, cụ thể gồm có SHA1, SHA256, SHA384 và SHA512
Về SHA1 mình đã có đề cập đến trong bài viết: Lập trình C# – Mã hóa MD5 và SHA1
Những giải thuật băm này trong C# .NET đã hỗ trợ rất nhiều rồi, mình chỉ viết 1 class để thuận tiện hơn trong việc sử dụng.
using System.Security.Cryptography; using System.Text; namespace HashFunction.Hash { public class SHA_Hash { public static string SHA1(string text) { SHA1Managed sha1 = new SHA1Managed(); byte[] hash = sha1.ComputeHash(Encoding.UTF8.GetBytes(text)); StringBuilder hashSb = new StringBuilder(); foreach (byte b in hash) { hashSb.Append(b.ToString("x2")); } return hashSb.ToString(); } public static string SHA256(string text) { SHA256Managed sha256 = new SHA256Managed(); StringBuilder hashSb = new StringBuilder(); byte[] hash = sha256.ComputeHash(Encoding.UTF8.GetBytes(text)); foreach (byte b in hash) { hashSb.Append(b.ToString("x2")); } return hashSb.ToString(); } public static string SHA384(string text) { SHA384Managed sha384 = new SHA384Managed(); StringBuilder hashSb = new StringBuilder(); byte[] hash = sha384.ComputeHash(Encoding.UTF8.GetBytes(text)); foreach (byte b in hash) { hashSb.Append(b.ToString("x2")); } return hashSb.ToString(); } public static string SHA512(string text) { SHA512Managed sha512 = new SHA512Managed(); StringBuilder hashSb = new StringBuilder(); byte[] hash = sha512.ComputeHash(Encoding.UTF8.GetBytes(text)); foreach (byte b in hash) { hashSb.Append(b.ToString("x2")); } return hashSb.ToString(); } } }
Ví dụ về các hàm băm SHA1 – SHA256 – SHA384 – SHA512
using HashFunction.Hash; using System; namespace HashFunction { class MainClass { public static void Main() { string text = "laptrinhcsharp"; string str_sha256 = SHA_Hash.SHA256(text); string str_sha1 = SHA_Hash.SHA1(text); string str_sha384 = SHA_Hash.SHA384(text); string str_sha512 = SHA_Hash.SHA512(text); Console.WriteLine($"SHA256: {str_sha256}"); Console.WriteLine($"SHA1: {str_sha1}"); Console.WriteLine($"SHA384: {str_sha384}"); Console.WriteLine($"SHA512: {str_sha512}"); Console.ReadKey(); } } }
Và sau khi chạy ta có kết quả như sau:
- SHA256: ffe14c43ab764390018604c33ccf8c9a3549dec0577b6f6a00ca5c29b2d15705
- SHA1: b8fa0bb5ce8427bf5bef806f3d5344c9f57f4ada
- SHA384: 6f8fd281515a60985ec58a6f0e2a81a345160179b0592b8700e15b54488db335fe9de7e450c4c9632e63ceaea8b1ab84
- SHA512: 52e247d12dd46e32942b70497fa2a149f08e82e5d4c80b778d1f6b283cfea889dce8b41096849442738b16d5f7aafe2d6cf905187fff3fb5e6b6cae00a1827ce