暗号化と復号化してみる
オーソドックスに DES 暗号を使ってみる。
使う namespace は
using System.Security.Cryptography; using System.IO;
で、他に使いそうなもので、以下のメソッドを用意
private static byte[] ResizeBytesArray ( byte[] bytes, int newSize ) { byte[] newLine = new byte[newSize]; if (bytes.Length<=newSize) { for (int i=0; i<bytes.Length; i++) newLine[i] = bytes[i]; } else { int pos = 0; for (int i=0; i<bytes.Length; i++) { newLine[pos++] ^= bytes[i]; pos = (pos>=newLine.Length)?0:pos; } } return newLine; }
で、使い方は
/* 暗号化したい文字列とパスワード */ byte[] val = System.Text.Encoding.UTF8.GetBytes("HOHOHO"); byte[] key = System.Text.Encoding.UTF8.GetBytes("password"); /* DES暗号化オブジェクト */ DESCryptoServiceProvider des = new DESCryptoServiceProvider(); /* 共通鍵設定 */ des.Key = ResizeBytesArray(key,des.Key.Length); des.IV = ResizeBytesArray(key,des.IV.Length); /* メモリ中にバッファを用意 */ MemoryStream msOut = new MemoryStream(); ICryptoTransform descrypt = des.CreateEncryptor(); CryptoStream cryptStreem = new System.Security.Cryptography.CryptoStream( msOut ,descrypt ,CryptoStreamMode.Write); /* 実際に暗号化 */ cryptStreem.Write(val,0,val.Length); cryptStreem.FlushFinalBlock(); /* 暗号化済みデータ取得 */ byte[] Out = msOut.ToArray(); /* 後始末 */ cryptStreem.Close(); msOut.Close(); /* 文字列に再度変換 */ string base64_data = System.Convert.ToBase64String(Out);
暗号化に関しては以上。
結局バイナリファイルも暗号化できることを前提にしているため、直接文字列を突っ込めないのが痛いか、、、。