Mã hóa với AES trên CSharp

Thuật toán AES làm việc với các khối dữ liệu có độ dài 128bit và khóa có độ dài 128, 192 hoặc 256bit. Theo Wiki, thiết kế của thuật toán AES có thể ứng dụng vào để bảo vệ các thông tin được xếp hạng Tuyệt Mật. :D Lảm nhảm đủ rồi.

Giờ là phần code ứng dụng mã hóa AES với C#:

Mã hóa

private static void EncryptFile(string inputFile, string outputFile, string skey)
{
    try
    {
        using (RijndaelManaged aes = new RijndaelManaged())
        {
            byte[] key = ASCIIEncoding.UTF8.GetBytes(skey);

            /* This is for demostrating purposes only.
             * Ideally you will want the IV key to be different from your key and you should always generate a new one for each encryption in other to achieve maximum security*/
            byte[] IV = ASCIIEncoding.UTF8.GetBytes(skey);

            using (FileStream fsCrypt = new FileStream(outputFile, FileMode.Create))
            {
                using (ICryptoTransform encryptor = aes.CreateEncryptor(key, IV))
                {
                    using (CryptoStream cs = new CryptoStream(fsCrypt, encryptor, CryptoStreamMode.Write))
                    {
                        using (FileStream fsIn = new FileStream(inputFile, FileMode.Open))
                        {
                            int data;
                            while ((data = fsIn.ReadByte()) != -1)
                            {
                                cs.WriteByte((byte)data);
                            }
                        }
                    }
                }
            }
        }
    }
    catch (Exception ex)
    {
        // failed to encrypt file
    }
}

Phần giải mã

private static void DecryptFile(string inputFile, string outputFile, string skey)
{
    try
    {
        using (RijndaelManaged aes = new RijndaelManaged())
        {
            byte[] key = ASCIIEncoding.UTF8.GetBytes(skey);

            /* This is for demostrating purposes only.
             * Ideally you will want the IV key to be different from your key and you should always generate a new one for each encryption in other to achieve maximum security*/
            byte[] IV = ASCIIEncoding.UTF8.GetBytes(skey);

            using (FileStream fsCrypt = new FileStream(inputFile, FileMode.Open))
            {
                using (FileStream fsOut = new FileStream(outputFile, FileMode.Create))
                {
                    using (ICryptoTransform decryptor = aes.CreateDecryptor(key, IV))
                    {
                        using (CryptoStream cs = new CryptoStream(fsCrypt, decryptor, CryptoStreamMode.Read))
                        {
                            int data;
                            while ((data = cs.ReadByte()) != -1)
                            {
                                fsOut.WriteByte((byte)data);
                            }
                        }
                    }
                }
            }
        }
    }
    catch (Exception ex)
    {
        // failed to decrypt file
    }
}

Sử dụng:

//EncryptFile("Location to the file we want to encrypt", "Location of the encrypted file we want to create", "Password of 16 letters/digits");

EncryptFile("C:\\file.rar", "c:\\encryptedfile.rar", "password12345678");

//DecryptFile("Location of the encrypted file we want to decrypt", "Location of the decrypted file we want to create", "The password we used to encrypt the file");

DecryptFile("C:\\encryptedfile.rar", "c:\\file.rar", "password12345678");