Cのマーシャルライブラリを使用したECB暗号化の実装#

こんにちは 友人や同僚からの質問に次第に出会うようになり、「C#で暗号化を実装する方法」というトピックについて単純にリクエストします。 だから、誰がこれをどのように実装できるのか興味があるでしょう。

ECBモードは、オープンデータのブロックのシーケンスを暗号化されたデータのブロックのシーケンスに変換できるブロック暗号アプリケーション方式です。 より正確には、ウィキペディアで調べることができます。 私は問題の本質を伝えます。



たとえば、暗号化する必要があるファイルがあります。 最初に思い浮かぶのは、ファイルまたはファイルへのパスを引数として取る関数が必要だということです。 この関数_CRYPTOを呼び出します。



static void CRYPTO(string f) { string H = File.ReadAllText(f); FileStream FILE = File.Open(f, FileMode.Open); byte[] Key = Encoding.Default.GetBytes("key12345678"); Array.Resize(ref Key, 16); RijndaelManaged RMCrypto = new RijndaelManaged(); RMCrypto.Mode = CipherMode.ECB; RMCrypto.Padding = PaddingMode.Zeros; RMCrypto.KeySize = 128; RMCrypto.Key = Key; ICryptoTransform Encryptor = RMCrypto.CreateEncryptor(); CryptoStream Crypt = new CryptoStream(FILE, Encryptor, CryptoStreamMode.Write); using (StreamWriter sw = new StreamWriter(Crypt, Encoding.Unicode)) { sw.Write(H); sw.Flush(); } Console.WriteLine(H); FILE.Close(); }
      
      







実際、すべてがシンプルです! Key変数には、任意の値を指定できます。 たとえば、ランダムな組み合わせを生成するジェネレーターを作成し、ファイルに書き込みました。 RMCrypto.Mode = CipherMode.ECBは暗号化タイプを実装します。 このコードで最も興味深いのは、Encoding.Unicodeタイプのレコードパラメーターです。 ここで、暗号化のエンコードを変更します。



さて、DERCYPTOファイルの復号化を実装する関数:



 static void DECRYPTO(string f) { FileStream FILE = File.Open(f, FileMode.Open); string S = FILE.ToString(); string plaintext = null; byte[] Key = Encoding.Default.GetBytes("key12345678"); Array.Resize(ref Key, 16); RijndaelManaged RMCrypto = new RijndaelManaged(); RMCrypto.Mode = CipherMode.ECB; RMCrypto.Padding = PaddingMode.Zeros; RMCrypto.KeySize = 128; RMCrypto.Key = Key; ICryptoTransform Decryptor = RMCrypto.CreateDecryptor(); CryptoStream Crypt = new CryptoStream(FILE, Decryptor, CryptoStreamMode.Read); using (StreamReader sw = new StreamReader(Crypt, Encoding.Unicode)) { plaintext = sw.ReadToEnd(); } File.WriteAllText(f, plaintext.ToString()); Console.WriteLine(plaintext); FILE.Close(); }
      
      







操作後にファイルを閉じることを忘れないでください;そうしないと、スレッドが閉じられないためエラーが発生します。




All Articles