質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

暗号化

ネットワークを通じてデジタルデータをやり取りする際に、第三者に解読されることのないよう、アルゴリズムを用いてデータを変換すること。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

1回答

1079閲覧

[rijndael/C#]復号プログラムをヒントに、暗号プログラムを作成したい

tehori

総合スコア1

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

暗号化

ネットワークを通じてデジタルデータをやり取りする際に、第三者に解読されることのないよう、アルゴリズムを用いてデータを変換すること。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2021/10/31 15:24

編集2021/11/01 15:47

###実現したいこと

暗号化されたテキストファイルと復号プログラムがあります。
ここから(再)暗号化プログラムを作成したいのですが、復号プログラムを少し変えるだけで暗号化プログラムにできたりするのでしょうか?

###復号プログラム

C#

1using System; 2 3namespace Sample 4{ 5 class Sample 6 { 7 static void Main() 8 { 9 10 Sample sample = new Sample(); 11 Console.WriteLine(sample.DecS(".....(ここに暗号化文を入れる)","aaa")); 12 13 14 } 15 16 private string DecS(string text, string p) 17 { 18 System.Security.Cryptography.RijndaelManaged _rijndael = new System.Security.Cryptography.RijndaelManaged(); 19 20 byte[] _key, _iv; 21 GenerateKeyFromPassWord(p, _rijndael.KeySize, out _key, _rijndael.BlockSize, out _iv); 22 _rijndael.Key = _key; 23 _rijndael.IV = _iv; 24 25 26 27 System.Security.Cryptography.ICryptoTransform _decryptor = _rijndael.CreateDecryptor(); 28 29 byte[] _strByte = System.Convert.FromBase64String(text); 30 31 byte[] _decByte = _decryptor.TransformFinalBlock(_strByte, 0, _strByte.Length); 32 _decryptor.Dispose(); 33 34 35 36 return System.Text.Encoding.UTF8.GetString(_decByte); 37 } 38 39 public static void GenerateKeyFromPassWord(string pass, int keySize, out byte[] key, int blockSize, out byte[] iv) 40 { 41 byte[] _salt = System.Text.Encoding.UTF8.GetBytes("これがsaltとなります"); 42 43 System.Security.Cryptography.Rfc2898DeriveBytes _deviceBytes = new System.Security.Cryptography.Rfc2898DeriveBytes(pass, _salt); 44 _deviceBytes.IterationCount = 1000; 45 46 key = _deviceBytes.GetBytes(keySize / 8); 47 iv = _deviceBytes.GetBytes(blockSize / 8); 48 } 49 } 50}

復号プログラムは、"GenerateKeyFromPassWord"関数で、パスワードからkeyとivを作成し、rijndaelのdecryptorでkey/ivを元に復号しているものと理解しています。
その逆(暗号化)を実現し、復号→編集→再暗号化→復号...と出来るようにしたいのですが、どうすればいいのかさっぱり見当がつきません。

非常におおざっぱな質問で大変恐縮に思っているのですが、ヒントだけでも頂けると幸いです...!
まずは、暗号化のプログラムは既にある復号プログラムを元に作ることができるのか、それとも全く別の情報が必要になるのかが知りたいと思っております。。。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tehori

2021/11/02 00:43

おっしゃる通りです
guest

回答1

0

自己解決

結論rijndaelにおいて「暗号化テキスト」と「復号プログラム」の情報があれば「暗号化プログラム」を再構築することは可能です。

復号手順
・decryptor作成
・Base64からstrに変換
・decrypt
・decryptしたstrを返す

暗号化手順
・encryptor作成
・strをencrypt
・strをBase64に変換

投稿2021/11/02 00:50

tehori

総合スコア1

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問