02/10/2018, 00:51

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:

Mã hóa và giải mã thuật toán AES

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

Tags: thuật toán mã hóamã hóagiải mãaes
0