3流プログラマのメモ書き

元開発職→社内SE→派遣で営業支援の三流プログラマのIT技術メモ書き。 このメモが忘れっぽい自分とググってきた技術者の役に立ってくれれば幸いです。(jehupc.exblog.jpから移転中)

(.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);

}

鍵の部分で同じ文字列の繰り返しだと、暗号化時に弱すぎるよって例外が発生して怒られました。(具体的に何の例外だったかは忘れましたが。。。)

参考:

GDD Blog: [.NET]文字列の暗号化(3DES)

MSDN:10 行でズバリ !! 暗号化 (C#)