DESを使用してファイルを暗号化する方法
ちょっと詰まったのでメモ書き。
C#を使用してDESでファイルを暗号化する方法はMicrosoftにサンプルコードが載っている
ただしこの方法だとエンコードの違いで文字化けを起こしてしまう。このため、以下のURLを参考にファイルを吐き出す方法の記載を変更する必要がある。
サンプルコード
修正したコードは以下の通り。
static void DecryptFile(string sInputFilename, string sOutputFilename, string sKey) { DESCryptoServiceProvider DES = new DESCryptoServiceProvider(); //このプロバイダでは、64 ビット キーと IV が必要です。 //DES アルゴリズムの秘密キーを設定します。 DES.Key = ASCIIEncoding.ASCII.GetBytes(sKey); //初期化ベクタを設定します。 DES.IV = ASCIIEncoding.ASCII.GetBytes(sKey); //暗号化されたファイルを読み戻すためにファイル ストリームを作成します。 FileStream fsread = new FileStream(sInputFilename, FileMode.Open, FileAccess.Read); //DES インスタンスから DES decryptor を作成します。 ICryptoTransform desdecrypt = DES.CreateDecryptor(); //読み取りのために暗号ストリームを作成し、 //入力バイト列で DES 復号化変換を行います。 CryptoStream cryptostreamDecr = new CryptoStream(fsread, desdecrypt, CryptoStreamMode.Read); // ********************************************************************** // ここから↓がマイクロソフト サポート オンラインから修正している箇所 // ********************************************************************** //復号化されたファイルを書き出すためのFileStream FileStream fswrite = new FileStream(sInputFilename, FileMode.Create, FileAccess.Write); //復号化されたデータを書き出す byte[] bs = new byte[256]; int readLen; while ((readLen = cryptostreamDecr.Read(bs, 0, bs.Length)) > 0) fswrite.Write(bs, 0, readLen); //閉じる cryptostreamDecr.Close(); fsread.Close(); fswrite.Close(); }
まとめ
ちょっと修正したファイルを説明すると、256byteの読み込みバッファを作って、そこに複合した値をいったん渡してからFileStreamを使用してファイルに書き込んでいるってコードみたい。
分かりやすいコードを書いてくださった、DOBONさん。ありがとうございました。