Hướng dẫn mã hóa và giải mã sử dụng thuật toán AES
Bài viết hôm nay, mình xin hướng dẫn các bạn cách mã hóa và giải mã sử dụng thuật toán AES. Vậy thuật toán AES là gì? Thuật toán được đặt tên là "Rijndael" khi tham gia cuộc thi thiết kế AES. Rijndael được phát âm là "Rhine dahl" theo phiên ...
Bài viết hôm nay, mình xin hướng dẫn các bạn cách mã hóa và giải mã sử dụng thuật toán AES.
Vậy thuật toán AES là gì?
Thuật toán được đặt tên là "Rijndael" khi tham gia cuộc thi thiết kế AES. Rijndael được phát âm là "Rhine dahl" theo phiên âm quốc tế. Thuật toán được thiết kế bởi hai nhà mật mã học người Bỉ: Joan Daemen và Vincent Rijmen.
Giống như tiêu chuẩn tiền nhiệm DES, AES được kỳ vọng áp dụng trên phạm vi thế giới và đã được nghiên cứu rất kỹ lưỡng. AES được chấp thuận làm tiêu chuẩn liên bang bởi Viện tiêu chuẩn và công nghệ quốc gia Hoa kỳ (NIST) sau một quá trình tiêu chuẩn hóa kéo dài 5 năm. AES (viết tắt của từ tiếng Anh: Advanced Encryption Standard, hay Tiêu chuẩn mã hóa tiên tiến) là một thuật toán mã hóa khối được chính phủ Hoa kỳ áp dụng làm tiêu chuẩn mã hóa.
Lưu ý: thuật toán mã hóa hóa AES là thuật toán 2 chiều (có thể dịch ngược).
Ở bài viết này, mình sử dụng thuật toán này để mã hóa hóa file.
Demo ứng dụng:
Source code chương trình:
Viết hàm mã hóa Encrypt AES
Public Function AES_Encrypt(ByVal input As String, ByVal pass As String) As String Dim AES As New System.Security.Cryptography.RijndaelManaged Dim Hash_AES As New System.Security.Cryptography.MD5CryptoServiceProvider Dim encrypted As String = "" Try Dim hash(31) As Byte Dim temp As Byte() = Hash_AES.ComputeHash(System.Text.ASCIIEncoding.ASCII.GetBytes(pass)) Array.Copy(temp, 0, hash, 0, 16) Array.Copy(temp, 0, hash, 15, 16) AES.Key = hash AES.Mode = Security.Cryptography.CipherMode.ECB Dim DESEncrypter As System.Security.Cryptography.ICryptoTransform = AES.CreateEncryptor Dim Buffer As Byte() = System.Text.ASCIIEncoding.UTF8.GetBytes(input) encrypted = Convert.ToBase64String(DESEncrypter.TransformFinalBlock(Buffer, 0, Buffer.Length)) Return encrypted Catch ex As Exception End Try End Function
- Tiếp tục, viết hàm giải mã
Public Function AES_Decrypt(ByVal input As String, ByVal pass As String) As String Dim AES As New System.Security.Cryptography.RijndaelManaged Dim Hash_AES As New System.Security.Cryptography.MD5CryptoServiceProvider Dim decrypted As String = "" Try Dim hash(31) As Byte Dim temp As Byte() = Hash_AES.ComputeHash(System.Text.ASCIIEncoding.ASCII.GetBytes(pass)) Array.Copy(temp, 0, hash, 0, 16) Array.Copy(temp, 0, hash, 15, 16) AES.Key = hash AES.Mode = Security.Cryptography.CipherMode.ECB Dim DESDecrypter As System.Security.Cryptography.ICryptoTransform = AES.CreateDecryptor Dim Buffer As Byte() = Convert.FromBase64String(input) decrypted = System.Text.ASCIIEncoding.UTF8.GetString(DESDecrypter.TransformFinalBlock(Buffer, 0, Buffer.Length)) Return decrypted Catch ex As Exception End Try End Function
- Viết sự kiện cho button mã hóa
Private Sub btnEncrypt_Click(sender As Object, e As EventArgs) Handles btnEncrypt.Click txtEncrypt.Text = AES_Encrypt(txtinput.Text, txtKey.Text) End Sub
- Tiếp tục, viết sự kiện cho button giải mã
Private Sub btnDecrypt_Click(sender As Object, e As EventArgs) Handles btnDecrypt.Click txtDecrypt.Text = AES_Decrypt(txtEncrypt.Text, txtKey.Text) End Sub
CHÚC CÁC BẠN THÀNH CÔNG
DOWNLOAD SOURCE