C# AESで暗号化

[English]

.NET Frameworkには標準で暗号化クラスが容易されているので、簡単に暗号化・復号化を行うことができます。
下のサンプルでは固定文字列の暗号キーを使用して文字列の暗号化・復号化を行います。
暗号化のアルゴリズムは無線LANなどで良く使用されるAESを使用します。

using System.IO;
using System.Security.Cryptography;
			
        // 128bit(16byte)のIV(初期ベクタ)とKey(暗号キー)
        private const string AesIV = @"!QAZ2WSX#EDC4RFV";
        private const string AesKey = @"5TGB&YHN7UJM(IK<";
        
        /// <summary>
        /// 文字列をAESで暗号化
        /// </summary>
        private string Encrypt(string text)
        {
            // AES暗号化サービスプロバイダ
            AesCryptoServiceProvider aes = new AesCryptoServiceProvider();
            aes.BlockSize = 128;
            aes.KeySize = 128;
            aes.IV = Encoding.UTF8.GetBytes(AesIV);
            aes.Key = Encoding.UTF8.GetBytes(AesKey);
            aes.Mode = CipherMode.CBC;
            aes.Padding = PaddingMode.PKCS7;
        
            // 文字列をバイト型配列に変換
            byte[] src = Encoding.Unicode.GetBytes(text);
        
            // 暗号化する
            using (ICryptoTransform encrypt = aes.CreateEncryptor())
            {
                byte[] dest = encrypt.TransformFinalBlock(src, 0, src.Length);
        
                // バイト型配列からBase64形式の文字列に変換
                return Convert.ToBase64String(dest);
            }
        }
        
        /// <summary>
        /// 文字列をAESで復号化
        /// </summary>
        private string Decrypt(string text)
        {
            // AES暗号化サービスプロバイダ
            AesCryptoServiceProvider aes = new AesCryptoServiceProvider();
            aes.BlockSize = 128;
            aes.KeySize = 128;
            aes.IV = Encoding.UTF8.GetBytes(AesIV);
            aes.Key = Encoding.UTF8.GetBytes(AesKey);
            aes.Mode = CipherMode.CBC;
            aes.Padding = PaddingMode.PKCS7;
        
            // Base64形式の文字列からバイト型配列に変換
            byte[] src = System.Convert.FromBase64String(text);
        
            // 複号化する
            using (ICryptoTransform decrypt = aes.CreateDecryptor())
            {
                byte[] dest = decrypt.TransformFinalBlock(src, 0, src.Length);
                return Encoding.Unicode.GetString(dest);
            }
        }
			

サンプルではIV(初期ベクタ)とKey(暗号キー)を固定の文字列にしていますが、IVに関してはプログラム自動的に生成し、暗号化文字列の先頭に付加しても良いみたいです。

暗号化したデータはバイト型配列となり、そのままでは扱い難いのでBase64形式の文字列に変換しています。
Base64形式変換することで、TextBoxなどにも表示できるstring型で出力しています。
この変換も.NET Frameworkには標準で存在するため、特に注意する点はありません。

使用環境: Visual Studio 2010 .NET Framework 4

C# メニューリスト