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

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

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

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

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Q&A

0回答

933閲覧

[VS2019/C#/フォームアプリ]関数で処理されたテキスト(復号したテキスト)がテキストボックスに表示されない

tehori

総合スコア1

C#

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

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

0グッド

0クリップ

投稿2021/11/01 15:11

編集2021/11/02 12:25

###実現したいこととトラブル
Visual Studio 2019のC#フォームアプリケーションで、ウィンドウに暗号化されたテキストファイルをドラッグアンドドロップして、テキストボックス①に暗号化されたテキストをそのまま表示、テキストボックス②に復号された平文を表示したいと思っております。
しかし、テキストボックス①にD&Dしたテキストファイルの中身をそのまま表示はできるのですが、復号して平文を表示させることができません(空白のままです)。
復号関数DecSの実行場所などが悪いのでしょうか??

###コード

C#

1 2namespace WindowsFormsApp2 3{ 4 public partial class Form1 : Form 5 { 6 7 public Form1() 8 { 9 InitializeComponent(); 10 } 11 12 private void Form1_DragDrop(object sender, DragEventArgs e) 13 { 14 if (e.Data.GetDataPresent(DataFormats.FileDrop)) 15 { 16 /*string[] filePaths = (string[])e.Data.GetData(DataFormats.FileDrop); 17 foreach(string filePath in filePaths) 18 richTextBox1.Text = string.Format(filePath); 19 */ 20 string[] fileNameAry = (string[])e.Data.GetData(DataFormats.FileDrop); 21 22 String fileName = fileNameAry[0]; 23 24 string EncryptedText = null; 25 string PlainText = null; 26 27 //取得したパスを使ってファイルを開く 28 using (StreamReader sr = new StreamReader(fileName, Encoding.GetEncoding("utf-8"))) 29 { 30 31 while (sr.EndOfStream == false) 32 { 33 string text = sr.ReadToEnd(); 34 35 EncryptedText = text; 36 37 38 } 39 } 40 41 //ここで復号実行 42 PlainText = DecS(EncryptedText,"passwordAAA"); 43        //D&Dしたテキストの中身そのまま表示=うまくいく 44 richTextBox1.Text = string.Format(EncryptedText); 45        //上で復号実行した内容表示=何も表示されない。。。 46 richTextBox2.Text = string.Format(PlainText); 47 } 48 } 49 50 private void Form1_DragOver(object sender, DragEventArgs e) 51 { 52 if(e.Data.GetDataPresent(DataFormats.FileDrop)) 53 e.Effect = DragDropEffects.Copy; 54 else 55 e.Effect = DragDropEffects.None; 56 } 57 58 59 private string DecS(string text, string pass) 60 { 61 System.Security.Cryptography.RijndaelManaged _rijndael = new System.Security.Cryptography.RijndaelManaged(); 62 63 byte[] _key, _iv; 64 GenerateKeyFromPassWord(pass, _rijndael.KeySize, out _key, _rijndael.BlockSize, out iv); 65 _rijndael.Key = key; 66 _rijndael.IV = iv; 67 68 69 70 System.Security.Cryptography.ICryptoTransform _decryptor = _rijndael.CreateDecryptor(); 71 72 byte[] _strByte = System.Convert.FromBase64String(text); 73 74 byte[] _decByte = _decryptor.TransformFinalBlock(_strByte, 0, _strByte.Length); 75 _decryptor.Dispose(); 76 77 78 79 return System.Text.Encoding.UTF8.GetString(_decByte); 80 } 81 82 public static void GenerateKeyFromPassWord(string pass, int keySize, out byte[] key, int blockSize, out byte[] iv) 83 { 84 byte[] _salt = System.Text.Encoding.UTF8.GetBytes("・・・"); 85 86 System.Security.Cryptography.Rfc2898DeriveBytes _deviceBytes = new System.Security.Cryptography.Rfc2898DeriveBytes(pass, _salt); 87 _deviceBytes.IterationCount = 1000; 88 89 key = _deviceBytes.GetBytes(keySize); 90 iv = _deviceBytes.GetBytes(blockSize); 91 } 92 93 } 94 95 96} 97

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

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

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

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

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

tehori

2021/11/02 00:53

SurferOnWwwさん ご質問ありがとうございます。 こちらはrijndaelにおいては「暗号化されたテキスト」と「復号プログラム」があれば「暗号化プログラム」を再構築することが可能ということで解決しております
dodox86

2021/11/02 00:59

テキストボックスに表示されないのが問題なのではなく、DecS()がちゃんと動作していないだけでは? > //ここで復号実行 > PlainText = DecS(EncryptedText,"passwordAAA"); >         //D&Dしたテキストの中身そのまま表示=うまくいく > richTextBox1.Text = string.Format(EncryptedText); >         //上で復号実行した内容表示=何も表示されない。。。 > richTextBox2.Text = string.Format(PlainText); のようなコードがあったら、「PlainText = DecS(EncryptedText,"passwordAAA");」の時点で正しくPlainTextに要望通りのstringを得ているか最初に確認するのが普通です。ここで空文字列だったりすれば当然テキストボックスに表示されるはずがありません。あと、直接関係ないでしょうが、string.Format(PlainText)などと、string.Format()は意味が無いのでは。(ありますか?)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問