【C#】文字列を復号する
スポンサーリンク
【はじめに】
ここでは、 VisualStudioを使用したC#で復号のコンソールアプリケーションの作り方を紹介する。
なお、本記事の対象フレームワークは .NetFramework 4.5 を利用する。
【手順】
手順1 コンソールアプリケーション用のプロジェクトを作成する。
① VisualStudioを起動し、[ファイル]タブ→[新しいプロジェクト]から「新しいプロジェクト」画面を開く。
② 左ペインの[テンプレート]から[C#]を選択し、「コンソールアプリケーション」を選択する。
③ 画面下部の[名前]および[場所]に任意の値(ここでは「Decrypt」とする)を入力し[OK]ボタンをクリックする。
手順2 ソースコードを記述する。
① 「Program.cs」ファイルの内容を以下に変更する(コピペ可)。
using System; using System.IO; using System.Security.Cryptography; using System.Text; namespace Decrypt { 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[] args) { string s_Encrypted = string.Empty; string s_PlainText = string.Empty; // 復号する文字列(暗号文)を入力してもらう Console.WriteLine("暗号文を入力してください。:"); s_Encrypted = Console.ReadLine(); // 復号 s_PlainText = DecryptText(s_Encrypted, s_Key, s_IV); // 平文の表示 Console.WriteLine("平文:"); Console.WriteLine(s_PlainText); Console.ReadLine(); } /// <summary> /// 復号処理 /// </summary> /// <param name="s_Encrypted">暗号文</param> /// <param name="s_Key">暗号化キー</param> /// <param name="s_IV">暗号化ベクトル</param> /// <returns>平文</returns> private static string DecryptText(string s_Encrypted, string s_Key, string s_IV) { byte[] b_Encrypted = null; string s_PlainText = string.Empty; // キー、ベクターをバイナリ型に変換する byte[] b_Key = Encoding.GetEncoding(CHAR_CODE_SJIS).GetBytes(s_Key); byte[] b_IV = Encoding.GetEncoding(CHAR_CODE_SJIS).GetBytes(s_IV); // 暗号文をバイナリ型に変換する b_Encrypted = Convert.FromBase64String(s_Encrypted); using (RijndaelManaged rijAlg = new RijndaelManaged()) { // ブロックサイズ、キーサイズを設定 rijAlg.BlockSize = 128; rijAlg.KeySize = 128; rijAlg.Key = b_Key; rijAlg.IV = b_IV; ICryptoTransform decryptor = rijAlg.CreateDecryptor(rijAlg.Key, rijAlg.IV); using (MemoryStream ms_Decrypt = new MemoryStream(b_Encrypted)) { using (CryptoStream cs_Decrypt = new CryptoStream(ms_Decrypt, decryptor, CryptoStreamMode.Read)) { using (StreamReader sr_Decrypt = new StreamReader(cs_Decrypt)) { s_PlainText = sr_Decrypt.ReadLine(); } } } } return s_PlainText; } } }
手順3 実行する。
① [デバック]タブ→[デバッグ開始](またはF5キー)でデバッグを開始する。
② コマンドウィンドウに暗号化したい文字列(平文)を入力する。
※ 以下の画像ではサンプルとして「EncryptTest」を入力。
③ [Enter]キーを押下すると、暗号化した文字列が表示される。
【注意】
注意①
本記事は前回の記事の続きです。
ソースコード上の暗号化キーや暗号化ベクトルは、暗号化時に使用したものと同一でなければ復号はできません。
↓ 前回の記事 ↓
www.holiday-note.tech
-- 以上 --
参考ページ
RijndaelManaged Class (System.Security.Cryptography) | Microsoft Docs
プログラマの暗号化入門 - Qiita