(.Net)文字列を暗号化する(3DES)
設定ファイルに保存する一部の文字列をちょいと暗号化したかったのでC#でやってみました。
.Netでは共通鍵暗号化方式として3DESが提供されているようで、TripleDESCryptoServiceProviderクラスを使うと簡単にできます。
//鍵private const string CKEY = "1234567890abcdefghujklm";
//初期化ベクタ
private const string CVEC = "12345678";
//暗号化処理
private static string Encript(string str)
{
byte[] src = Encoding.UTF8.GetBytes(str);
//暗号用のキー情報をセットする
byte[] desKey = Encoding.UTF8.GetBytes( CKEY);
byte[] desIV = Encoding.UTF8.GetBytes(CVEC);
//暗号化用の3DESクラス生成
TripleDESCryptoServiceProvider des = new TripleDESCryptoServiceProvider();
MemoryStream ms = new MemoryStream();
//暗号化
CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(desKey, desIV), CryptoStreamMode.Write);
cs.Write(src, 0, src.Length);
cs.Close();
byte[] cryptData = ms.ToArray();
ms.Close();
return Encoding.UTF8.GetString(cryptData);
}
//復号化
private static string Decript(string str)
{
//Base64解除
byte[] src = Encoding.UTF8.GetBytes(str);
//暗号用のキー情報をセットする
byte[] desKey = Encoding.UTF8.GetBytes(CKEY);
byte[] desIV = Encoding.UTF8.GetBytes(CVEC);
//復号化用の3DESクラス生成
TripleDESCryptoServiceProvider des = new TripleDESCryptoServiceProvider();
MemoryStream ms = new MemoryStream();
//復号化
CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(desKey, desIV), CryptoStreamMode.Write);
cs.Write(src, 0, src.Length);
cs.Close();
byte[] cryptData = ms.ToArray();
ms.Close();
return Encoding.UTF8.GetString(cryptData);
}
鍵の部分で同じ文字列の繰り返しだと、暗号化時に弱すぎるよって例外が発生して怒られました。(具体的に何の例外だったかは忘れましたが。。。)
参考: