|
一応、暗号化のプログラムも載せておきます。
/// <summary> /// ファイルを暗号化する /// </summary> /// <remarks> /// 暗号化されたファイルは"(ファイル名).enc"として保存される /// </remarks> /// <param name="fileName">暗号化するファイル名</param> /// <param name="key">パスワード</param> public static void EncryptFile(string fileName, string key) { //暗号化するファイルを読み込む System.IO.FileStream fsIn = new System.IO.FileStream(fileName, System.IO.FileMode.Open, System.IO.FileAccess.Read); //すべて読み込む byte[] bytesIn = new byte[fsIn.Length]; fsIn.Read(bytesIn, 0, bytesIn.Length); //閉じる fsIn.Close();
//DESCryptoServiceProviderオブジェクトの作成 System.Security.Cryptography.DESCryptoServiceProvider des = new System.Security.Cryptography.DESCryptoServiceProvider();
//共有キーと初期化ベクタを決定 //パスワードをバイト配列にする byte[] bytesKey = System.Text.Encoding.UTF8.GetBytes(key); //共有キーと初期化ベクタを設定 des.Key = ResizeBytesArray(bytesKey, des.Key.Length); des.IV = ResizeBytesArray(bytesKey, des.IV.Length);
//暗号化されたファイルの保存先 string outFileName = fileName + ".enc"; //暗号化されたファイルを書き出すためのFileStream System.IO.FileStream fsOut = new System.IO.FileStream(outFileName, System.IO.FileMode.Create, System.IO.FileAccess.Write); //DES暗号化オブジェクトの作成 System.Security.Cryptography.ICryptoTransform desdecrypt = des.CreateEncryptor(); //書き込むためのCryptoStreamの作成 System.Security.Cryptography.CryptoStream cryptStreem = new System.Security.Cryptography.CryptoStream(fsOut, desdecrypt, System.Security.Cryptography.CryptoStreamMode.Write); //書き込む cryptStreem.Write(bytesIn, 0, bytesIn.Length); //閉じる cryptStreem.Close(); fsOut.Close(); }
/// <summary> /// ファイルを復号化する /// </summary> /// <param name="fileName">復号化するファイル名</param> /// <param name="key">パスワード</param> public static void DecryptFile(string fileName, string key) { //DESCryptoServiceProviderオブジェクトの作成 System.Security.Cryptography.DESCryptoServiceProvider des = new System.Security.Cryptography.DESCryptoServiceProvider();
//共有キーと初期化ベクタを決定 //パスワードをバイト配列にする byte[] bytesKey = System.Text.Encoding.UTF8.GetBytes(key); //共有キーと初期化ベクタを設定 des.Key = ResizeBytesArray(bytesKey, des.Key.Length); des.IV = ResizeBytesArray(bytesKey, des.IV.Length);
//暗号化されたファイルを読み込むためのFileStream System.IO.FileStream fsIn = new System.IO.FileStream(fileName, System.IO.FileMode.Open, System.IO.FileAccess.Read); //DES復号化オブジェクトの作成 System.Security.Cryptography.ICryptoTransform desdecrypt = des.CreateDecryptor(); //読み込むためのCryptoStreamの作成 System.Security.Cryptography.CryptoStream cryptStreem = new System.Security.Cryptography.CryptoStream(fsIn, desdecrypt, System.Security.Cryptography.CryptoStreamMode.Read);
//復号化されたファイルの保存先 string outFileName; if (fileName.ToLower().EndsWith(".enc")) outFileName = fileName.Substring(0, fileName.Length - 4); else outFileName = fileName + ".dec";
//復号化されたデータを書き出すためのStreamWriter System.IO.StreamWriter sw = new System.IO.StreamWriter(outFileName, false, System.Text.Encoding.GetEncoding("sjis")); //復号化されたデータを読み込む System.IO.StreamReader sr = new System.IO.StreamReader(cryptStreem, System.Text.Encoding.GetEncoding("sjis")); //復号化されたデータを書き出す sw.Write(sr.ReadToEnd()); sw.Flush();
//閉じる sr.Close(); sw.Close(); cryptStreem.Close(); fsIn.Close(); }
/// <summary> /// 共有キー用に、バイト配列のサイズを変更する /// </summary> /// <param name="bytes">サイズを変更するバイト配列</param> /// <param name="newSize">バイト配列の新しい大きさ</param> /// <returns>サイズが変更されたバイト配列</returns> private static byte[] ResizeBytesArray(byte[] bytes, int newSize) { byte[] newBytes = new byte[newSize]; if (bytes.Length <= newSize) { for (int i = 0; i < bytes.Length; i++) newBytes[i] = bytes[i]; } else { int pos = 0; for (int i = 0; i < bytes.Length; i++) { newBytes[pos++] ^= bytes[i]; if (pos >= newBytes.Length) pos = 0; } } return newBytes; }
|