.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には標準で存在するため、特に注意する点はありません。