【C#】文字列を暗号化する
スポンサーリンク
【はじめに】
ここでは、 VisualStudioを使用したC#で暗号化のコンソールアプリケーションの作り方を紹介する。
なお、本記事の対象フレームワークは .NetFramework 4.5 を利用する。
【手順】
手順1 コンソールアプリケーション用のプロジェクトを作成する。
① VisualStudioを起動し、[ファイル]タブ→[新しいプロジェクト]から「新しいプロジェクト」画面を開く。
② 左ペインの[テンプレート]から[C#]を選択し、「コンソールアプリケーション」を選択する。
③ 画面下部の[名前]および[場所]に任意の値(ここでは「Encrypt」とする)を入力し[OK]ボタンをクリックする。
手順2 ソースコードを記述する。
① 「Program.cs」ファイルの内容を以下に変更する(コピペ可)。
using System; using System.IO; using System.Security.Cryptography; using System.Text; namespace Encrypt { class Program { /// <summary> /// 暗号化キー /// </summary> private const string s_Key = "abcdefghijklmnop"; /// <summary> /// 暗号化ベクトル /// </summary> private const string s_IV = "1234567890123456"; /// <summary> /// 文字コード(SJIS) /// </summary> private const string CHAR_CODE_SJIS = "shift_jis"; /// <summary> /// メイン処理 /// </summary> static void Main() { string s_PlainText = string.Empty; string s_Encrypted = string.Empty; // 暗号化する文字列(平文)を入力してもらう Console.WriteLine("平文を入力してください。:"); s_PlainText = Console.ReadLine(); // 暗号化 s_Encrypted = EncryptText(s_PlainText, s_Key, s_IV); // 暗号文の表示 Console.WriteLine("暗号文:"); Console.WriteLine(s_Encrypted); Console.ReadLine(); } /// <summary> /// 暗号化処理 /// </summary> /// <param name="s_PlainText">平文</param> /// <param name="s_Key">暗号化キー</param> /// <param name="s_IV">暗号化ベクトル</param> /// <returns>暗号文</returns> private static string EncryptText(string s_PlainText, string s_Key, string s_IV) { byte[] b_Encrypted = null; string s_Encrypted = string.Empty; // キー、ベクターをバイナリ型に変換する byte[] b_Key = Encoding.GetEncoding(CHAR_CODE_SJIS).GetBytes(s_Key); byte[] b_IV = Encoding.GetEncoding(CHAR_CODE_SJIS).GetBytes(s_IV); using (RijndaelManaged rijAlg = new RijndaelManaged()) { // ブロックサイズ、キーサイズを設定 rijAlg.BlockSize = 128; rijAlg.KeySize = 128; rijAlg.Key = b_Key; rijAlg.IV = b_IV; ICryptoTransform encryptor = rijAlg.CreateEncryptor(rijAlg.Key, rijAlg.IV); using (MemoryStream ms_Encrypt = new MemoryStream()) { using (CryptoStream cs_Encrypt = new CryptoStream(ms_Encrypt, encryptor, CryptoStreamMode.Write)) { using (StreamWriter sw_Encrypt = new StreamWriter(cs_Encrypt)) { sw_Encrypt.Write(s_PlainText); } b_Encrypted = ms_Encrypt.ToArray(); } } } // バイナリ型から文字列型に変換する s_Encrypted = Convert.ToBase64String(b_Encrypted); return s_Encrypted; } } }
手順3 実行する。
① [デバック]タブ→[デバッグ開始](またはF5キー)でデバッグを開始する。
② コマンドウィンドウに暗号化したい文字列(平文)を入力する。
※ 以下の画像ではサンプルとして「EncryptTest」を入力。
③ [Enter]キーを押下すると、暗号化した文字列が表示される。
【おまけ】
おまけ① 文字列⇔バイナリ変換について
暗号文のバイナリ→文字列変換は「System.Convert.ToBase64String(str)」で変換しないとエラーになります。
(最初は「System.Text.Encoding」を利用していましたがエラーで詰まりました。)
おまけ② 復号について
こちらは次回の記事にまとめます。
↓ 復号の記事を投稿しました。 ↓
当たり前ですが、暗号化キーと初期ベクトルは暗号化と同じものを使用しないと、思い通りに復号できません。
-- 以上 --
参考ページ
RijndaelManaged Class (System.Security.Cryptography) | Microsoft Docs
プログラマの暗号化入門 - Qiita