ユーザーが登録したパスワードや、データベース接続文字列などを平分でデータベースやテキストをMD5で符号化して保存していたんだけど、よくよく考えてみると、これは不加逆型暗号で復号化できない。
ということで復号可能な暗号に切り替えることにした。.NET Frameworkのライブラリで利用できる暗号化プロバイダにDESがあったので、それを使うことに。
using System;
using System.Security.Cryptography;
private static byte[] desKey = System.Text.Encoding.ASCII.GetBytes("testkey");
private static byte[] desIV = System.Text.Encoding.ASCII.GetBytes("testkey");
public static byte[] EncryptData(string inData) {
try {
byte[] org = System.Text.Encoding.Unicode.GetBytes(inData);
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
des.Key = desKey;
des.IV = desIV;
ICryptoTransform transform = des.CreateEncryptor();
byte[] enc = transform.TransformFinalBlock( org, 0, org.Length );
transform.Dispose();
return enc;
} catch {
return null;
}
}
public static string DecryptData(byte[] enc) {
try {
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
des.Key = desKey;
des.IV = desIV;
ICryptoTransform transform = des.CreateDecryptor();
byte[] org = transform.TransformFinalBlock( enc, 0, enc.Length );
transform.Dispose();
return System.Text.Encoding.Unicode.GetString(org);
} catch {
return "Cant Present";
}
}
Unicode文字列を暗号化してbyte配列にするメソッドと、byte配列の暗号を復号してUnicode文字列に戻すメソッドのサンプル。
暗号化には鍵が必要。鍵が一致しないと復号化できない。暗号化したデータはbyte配列なので、テキストに保存するときは、エンコードして保存する必要がある。データベースのフィールドに保存するならbinary型のフィールドを用意する。


コメント