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

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

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

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

暗号化

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

Unity

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

Q&A

解決済

1回答

4543閲覧

[C#/復号]Base64ではない文字/パッディング文字が含まれている???

tehori

総合スコア1

C#

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

暗号化

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

Unity

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

0グッド

0クリップ

投稿2021/10/31 13:04

編集2021/11/01 15:50

###実現したいこととトラブル
C#で復号プログラムを作ろうとしています。
Unhandled Exception:以下のメッセージが調べても理解できず、お力をお貸しいただけませんでしょうか
BASE64形式のテキストに変換する必要があるのでしょうか?

###エラーメッセージ

Unhandled Exception:

System.FormatException: The input is not a valid Base-64 string as it contains a non-base 64 character, more than two padding characters, or an illegal character among the padding characters.
at System.Convert.FromBase64CharPtr (System.Char* inputPtr, System.Int32 inputLength) [0x00068] in <12b418a7818c4ca0893feeaaf67f1e7f>:0
at System.Convert.FromBase64String (System.String s) [0x00028] in <12b418a7818c4ca0893feeaaf67f1e7f>:0
at Sample.Sample.DecS (System.String text, System.String p) [0x0002c] in /workspace/Main.cs:25
at Sample.Sample.Main () [0x00012] in /workspace/Main.cs:11
[ERROR] FATAL UNHANDLED EXCEPTION: System.FormatException: The input is not a valid Base-64 string as it contains a non-base 64 character, more than two padding characters, or an illegal character among the padding characters.
at System.Convert.FromBase64CharPtr (System.Char* inputPtr, System.Int32 inputLength) [0x00068] in <12b418a7818c4ca0893feeaaf67f1e7f>:0
at System.Convert.FromBase64String (System.String s) [0x00028] in <12b418a7818c4ca0893feeaaf67f1e7f>:0
at Sample.Sample.DecS (System.String text, System.String p) [0x0002c] in /workspace/Main.cs:25
at Sample.Sample.Main () [0x00012] in /workspace/Main.cs:11

###コード

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.Decode("...","aaa")); 12 13 14 } 15 16 private string Decode(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 byte[] _strByte = System.Convert.FromBase64String(text); 26 27 System.Security.Cryptography.ICryptoTransform _decryptor = _rijndael.CreateDecryptor(); 28 29 byte[] _decByte = _decryptor.TransformFinalBlock(_strByte, 0, _strByte.Length); 30 _decryptor.Dispose(); 31 32 return System.Text.Encoding.UTF8.GetString(_decByte); 33 } 34 35 public static void GKFP(string pass, int keySize, out byte[] key, int blockSize, out byte[] iv) 36 { 37 byte[] _salt = System.Text.Encoding.UTF8.GetBytes("・・・"); 38 39 System.Security.Cryptography.Rfc2898DeriveBytes _deviceBytes = new System.Security.Cryptography.Rfc2898DeriveBytes(password, _salt); 40 41 key = _deviceBytes.GetBytes(keySize); 42 iv = _deviceBytes.GetBytes(blockSize); 43 } 44 } 45}

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

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

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

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

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

actorbug

2021/10/31 14:00

Base64エンコードされた文字列の長さは必ず4の倍数になりますが、今回デコードしようとしている文字列の長さが4の倍数ではありません。この文字列は、本当にBase64エンコードされたものなのでしょうか。
tehori

2021/10/31 14:07

ご返信いただき誠にありがとうございます。 Base64でエンコードされたものではあると思います。 元々1つのテキストファイルですが、一部を抜粋してコードに入力しました関係で不自然なことになっているのだと思います。 他に何かございましたらお願い申し上げます!
tehori

2021/10/31 14:10

もしかして、一部抜き出してしまうと文字列情報(?)が壊れてしまう等、Base64の文字列として認識なれないのでしょうか
actorbug

2021/10/31 14:12

そのとおりです。少なくとも、文字列の長さが4の倍数になるように切り出さないと、正しいBase64とはみなされません。
tehori

2021/10/31 14:14

文字列全部入れたところ正しく実行されました!! 貴重なヒントをくださり、誠にありがとうございました<(_ _)>
guest

回答1

0

自己解決

暗号分の一部を抜粋して、関数に投げていたのが問題だったようです。
メモ:
Base64の文字列は適当に抜粋すると文字列情報が壊れる。

投稿2021/11/01 15:14

tehori

総合スコア1

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問