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

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

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

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

暗号化

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

Q&A

解決済

2回答

1455閲覧

C#の復号プログラムでエラーが出てしまいます

tehori

総合スコア1

C#

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

暗号化

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

0グッド

0クリップ

投稿2021/10/31 12:26

編集2021/11/01 15:55

前提・実現したいこと

C#で復号プログラムを作ろうとしています。
しかしエラーメッセージが出て困っています。

発生している問題・エラーメッセージ

Main.cs(11,25): error CS0120: An object reference is required to access non-static member `Sample.Sample.DecS(string, string)'

該当のソースコード

C#

1using System; 2 3namespace Sample 4{ 5 class Sample 6 { 7 static void Main() 8 { 9 10 Console.WriteLine(Decode("・・・","aaaa")); 11 12 13 } 14 15 private string Decode(string text, string p) 16 { 17 System.Security.Cryptography.RijndaelManaged _rijndael = new System.Security.Cryptography.RijndaelManaged(); 18 19 byte[] _key, _iv; 20 GKFP(p, _rijndael.KeySize, out _key, _rijndael.BlockSize, out _iv); 21 _rijndael.Key = _key; 22 _rijndael.IV = _iv; 23 24 byte[] _strByte = System.Convert.FromBase64String(text); 25 26 System.Security.Cryptography.ICryptoTransform _decryptor = _rijndael.CreateDecryptor(); 27 28 byte[] _decByte = _decryptor.TransformFinalBlock(_strByte, 0, _strByte.Length); 29 _decryptor.Dispose(); 30 31 return System.Text.Encoding.UTF8.GetString(_decByte); 32 } 33 34 public static void GKFP(string pass, int keySize, out byte[] key, int blockSize, out byte[] iv) 35 { 36 byte[] _salt = System.Text.Encoding.UTF8.GetBytes("・・・"); 37 38 System.Security.Cryptography.Rfc2898DeriveBytes _deviceBytes = new System.Security.Cryptography.Rfc2898DeriveBytes(pass, _salt); 39 40 41 key = _deviceBytes.GetBytes(keySize); 42 iv = _deviceBytes.GetBytes(blockSize); 43 } 44 } 45}

おそらく非常に基本的なエラーかと思いますが、何かヒントだけでもご教示いただけますと幸いです。

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

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

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

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

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

guest

回答2

0

ベストアンサー

エラーの原因は static メソッドである Main メソッドから、static でないメソッドを呼び出している為です。
クラスをインスタンス化するか DecS メソッドを static に変更下さい。

■ 方法1

C#

1Sample sample = new Sample(); 2Console.WriteLine(sample.DecS(...));

■ 方法2

C#

1//private string DecS(string text, string p) 2private static string DecS(string text, string p)

投稿2021/10/31 12:41

cx20

総合スコア4632

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

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

0

まずはメッセージぐらい読みましょう
エラ―メッセージは暴言ではありません。コンパイラ等からのメッセージです。
ヒントが隠されています。

Main.cs(11,25): error CS0120: An object reference is required to access non-static member `Sample.Sample.DecS(string, string)' [訳] Main.csの11行目。エラー。Sample.Sample.DecS(string, string)というstaticでないメンバにアクセスしています。

ざっと見た感じ、11行目は Mainメソッドの Console.WriteLine(DecS("RYlIx.."));の周辺のようですね。

このDecSとはなんでしょうか。

Sample.Sampleクラスのメソッドですね。これは 非staticなので「オブジェクトを生成(= インスタンス化)」しないと使えません。
でもこのクラスをインスタンス化している様子はない。

ここまで書けば、基礎ができていれば簡単にわかるはずです。

投稿2021/10/31 12:38

BeatStar

総合スコア4958

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

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

tehori

2021/10/31 12:55

素早く的を射た回答誠にありがとうございます 一刻も早く基礎を身に着けエラーメッセージを理解できるようになろうと思います
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問