問題タブ [badpaddingexception]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - AES/ECB を使用して復号化中に「BadPaddingException: パッド ブロックが破損しました」
Android/Java アプリでは、
上記のコードはBadPaddingException: pad block corrupted
、次の 16 バイトの暗号化されたデータに対して 常にスローします。
data = ":ʺ$jhk¨ë‹òºã" (データは 16 文字)
キーの長さは 16 バイトです。
データがすでにブロックのサイズになっているのに、なぜこの例外がスローされるのですか? パディングは必要ありません。
注: 暗号化されたデータは、php サーバーから取得されます。
編集:
に変更
Cipher cipher = Cipher.getInstance("AES/ECB/NoPadding");
後
Cipher cipher = Cipher.getInstance("AES");
復号化メソッドは成功しますが、この出力が得られます
java - 文字列を暗号化しようとすると BadPaddingException が発生するのはなぜですか?
このリンクEncryption
を使用して、Android プロジェクトでバイナリ データを暗号化/復号化するクラスを作成します。
次に、メイン アクティビティでコードを実行します。
次にBadPaddingException
、次のコードが で実行されているときに を取得しtest()
ます。
面白いことに、Android プロジェクト以外に Java プロジェクトを作成しました。そして、コードは例外なく正常に実行されています。
コードの何が問題になっていますか?
java - javax.crypto.BadPaddingException: データハッシュが間違っています
javax.crypto パッケージをラップして使いやすくする暗号パッケージを Java で作成しようとしています。そこで、javax.crypto のみをラップする RSACore クラスを実装しました。次に、RSAEncoder と RSADecoder の 2 つのクラスを実装して、javax.crypto.Cipher とその開始を非表示にしました。
今私の問題に:RSACore、RSAEncoder、およびRSADecoderのいくつかの小さなテストを書きました。デコーダーのテストを除いて、すべてのテストは正常に機能します。エンコードされたデータに対して dofinal() を呼び出すと、毎回 BadPaddingException が発生します。私はそれをグーグルで検索し、ほとんどの場合、間違ったキーに関係していることがわかりましたが、1つのペアのみを生成して作業していると確信しています. エラーを検索する場所がわかりません。JCE では OAEP では署名できないというエラーが表示されたため、プロバイダとして bouncycastle を使用しています。完全なエラー メッセージは次のとおりです。
ここにテストがあります:
論理エラーがありますか? エンコーダー、デコーダー、コアも投稿できますが、それはたくさんの行です。読んで助けてくれてありがとう!
RSAエンコーダー:
RSADecoder (コンストラクタ以外は同じ):
RSAコア:
java - Java AES 復号化 BadPaddingException
注: Java NOOB。
わかりました、これはここで数十回回答されていることを知っていますが、解決策は機能していないようです/私が理解している場所に直接適用されるようには見えません. (はい、暗号化/復号化、AES などを完全に理解していないことはわかっていますが、それは重要ではありません。これを理解しようとしています)
文字列を渡し、暗号化された文字列を返したいユーティリティ API があります。次に、暗号化された文字列を渡し、復号化された文字列を返します。単純。渡す多くの文字列に対しては正常に機能しますが、一部の文字列では例外が発生しますjavax.crypto.BadPaddingException: Given final block not properly padded.
たとえば、次の暗号化/復号化は正常に行われます。
util/encrypt/?token=123456789012wha
= 4TR0CbCcQKqeRK73zr83aw==
util/decrypt/?token=4TR0CbCcQKqeRK73zr83aw==
= 123456789012wha
以下は暗号化しますが、復号化しません:
util/encrypt/?token=123456789012what
= NYaWmwnySoGNHyNmY9Jh+f3O2rqoLI1IAcnsl5V4OCE=
util/decrypt/?token=NYaWmwnySoGNHyNmY9Jh+f3O2rqoLI1IAcnsl5V4OCE=
= 例外
これが私のコントローラーのコードです:
私はそれが呼び出しに何かあるに違いないと考えており、Cipher.getInstance()
使用しようとしましCipher.getInstance("AES/CBC/PKCS5Padding")
たが、復号化するときに常に失敗します。ここで何が起こっているのか、それを修正する方法を本当に理解したいと思っています。
java - 間違ったキーによる Java AES 復号化
以下のように、単純な Java AES 暗号化と復号化を作成しました (学習目的で)。
暗号鍵は可変長の文字列です。文字列を MD5 ハッシュして 128 ビットの鍵を取得します。
同じキーを使用してデータを正常に暗号化および復号化できます。しかし、間違ったキーでデータを復号化すると、以下の例外が発生しました。
実際に私が期待しているのは、間違ったキーの復号化から生成された間違ったバイトですが、上記のようにスローされた例外ではありません。間違ったバイトが生成された場合、ハッカーは復号化が正しいかどうかわからない可能性があるためです。上記のように例外がスローされた場合、ブルート フォースの出力が判別しやすくなります。
それで、私のコードはどうなりますか?
編集:
私はここで間違いを犯したと思います。ハッカーは私のプログラムを使用して解読しない可能性があります。したがって、AES の場合、復号化に失敗した場合、復号化が失敗したことはわかりますが、復号化から間違ったバイトが得られるとは思いませんでしたか? これはひどいです...
java - AES 復号化エラー: Android パッド ブロックが破損しています
私の問題に対する答えを見つけるためにスタックを見回しましたが、何もうまくいきませんでした。私が達成しようとしているのは、ASYNCtask でダウンロードされた XML ファイルを暗号化し、後で復号化することです。
私がすでにチェックしたこと:
・生成された鍵は暗号化時と復号時と同じで、Base64 で sharedpreferenced に保存されます。
-IV は、現時点ではテスト目的の静的変数であるため、同じです。
-Cipher は AES/CBC/PKCS5Padding に設定されています
-キーはAESに設定されています
エラーは、decryptXml() の行:
byte[] decrypted = cipher.doFinal(bytes);に表示されます。
私はすべてアイデアがなく、何もうまくいかないようです。私のコードで間違いを見つけることができることを願っています。手伝ってくれてありがとう!
コード:
生成キー()
XML 暗号化:
復号化:
getSecretKey():
編集
IVジェネレーター方式の追加