3DES同様に暗号用のキー情報を保持する必要があり、その点が問題として残ります。コードはこんなかんじ。
(ボタン押下の処理です。txtOriginalとtxtHashはTextBox。共通処理は3DESと同じ)
//using System.Security.Cryptography;
//using System.IO;
string key = "0123456789ABCDEF0123456789ABCDEF";
string vec = "0123456789ABCDEF";
/// <summary>
/// AES暗号化
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnAESC_Click(object sender, EventArgs e)
{
//対象を16進バイト列化
byte[] data = Encoding.UTF8.GetBytes(txtOriginal.Text);
//暗号用のキー情報をセットする
byte[] aesKey = Encoding.UTF8.GetBytes(key);
byte[] aesIV = Encoding.UTF8.GetBytes(vec);
//暗号化オブジェクトとストリームを作成する
using (RijndaelManaged aes = new RijndaelManaged())
using (MemoryStream ms = new MemoryStream())
using (CryptoStream cs = new CryptoStream(ms, aes.CreateEncryptor(aesKey, aesIV),
CryptoStreamMode.Write))
{
// ストリームに暗号化するデータを出力
cs.Write(data, 0, data.Length);
cs.Close();
// 暗号化されたデータを取得
string code = byte2HexString(ms.ToArray());
txtHash.Text = code;
ms.Close();
}
}
/// <summary>
/// AES複合化
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnAESD_Click(object sender, EventArgs e)
{
//対象を16進バイト列化
byte[] data = hexString2Byte(txtHash.Text);
//暗号用のキー情報をセットする
byte[] aesKey = Encoding.UTF8.GetBytes(key);
byte[] aesIV = Encoding.UTF8.GetBytes(vec);
//暗号化オブジェクトとストリームを作成する
using (RijndaelManaged aes = new RijndaelManaged())
using (MemoryStream ms = new MemoryStream())
using (CryptoStream cs = new CryptoStream(ms, aes.CreateDecryptor(aesKey, aesIV),
CryptoStreamMode.Write))
{
// ストリームに複合化するデータを出力
cs.Write(data, 0, data.Length);
cs.Close();
// 複合化されたデータを取得
string code = Encoding.UTF8.GetString(ms.ToArray());
txtRestre.Text = code;
ms.Close();
}
}
0 件のコメント:
コメントを投稿