0

Android/Java での AES 暗号化について何も知りません

ここからこのコードを取得しましたhttp://www.androidsnippets.com/encryptdecrypt-strings

コードに問題があるかどうかを復号化するときに、以下のエラーが発生しますか?(暗号化された値をあるアクティビティから別のアクティビティに渡しています)

 05-18 13:49:58.828: W/System.err(3350): javax.crypto.BadPaddingException: pad block   corrupted
 05-18 13:49:59.133: W/System.err(3350):    at org.bouncycastle.jce.provider.JCEBlockCipher.engineDoFinal(JCEBlockCipher.java:653)
 05-18 13:49:59.148: W/System.err(3350):    at javax.crypto.Cipher.doFinal(Cipher.java:1116)
 05-18 13:49:59.153: W/System.err(3350):    at com.spacenext.noserver2.SimpleCrypto.decrypt(SimpleCrypto.java:55)
 05-18 13:49:59.158: W/System.err(3350):    at com.spacenext.noserver2.SimpleCrypto.decrypt(SimpleCrypto.java:28)

暗号化

 05-18 15:07:32.283: I/Home(3341): 530AEA4983C93379EB512387B4E547522C1E310AD6E7752AF5B9F91C329D313315FDDA853E60C78EA618211A37BA8A47

別のアクティビティで受信した暗号化メッセージ

 05-18 15:07:55.382: I/Home(7871): 530AEA4983C93379EB512387B4E547522C1E310AD6E7752AF5B9F91C329D313315FDDA853E60C78EA618211A37BA8A47

どちらも同じですが、メッセージが別のアクティビティで復号化されると、エラー メッセージがスローされます。

4

1 に答える 1

1

このコードは弱い鍵導出手順を使用しています。標準のパスワードベースの暗号化を使用して鍵を導出することを検討してください。

エラーの原因は、復号化に間違ったキーを使用している可能性があります。16進形式で印刷し、暗号化キー(の出力getRawKey())と比較します。なんらかの方法でコードをカスタマイズした場合は、関連する部分を表示してください。暗号化された値をどのように渡しますか?どういうわけかエンコードされていますか?また、サイズが復号化アクティビティで期待どおりであることを確認してください。

暗号化と復号化は異なるデバイスで行われ、サーバーが関係しているためです。ここにチェック/覚えておくべきいくつかの事柄があります:

  1. デバイスAから送信する暗号文がデバイスBで受信されるものであることを確認してください。エンコードの問題が関係している可能性があります。
  2. モードとパディングにデフォルトのパラメータを使用しないでください。これらはデバイスによって異なる場合があります。そのように明示的に指定してくださいCipher.getInstance("AES/CBC/PKCS5Padding")
  3. 暗号文と一緒にIVを送信するようにしてください。そうしないと、ランダムなものが自動的に生成され、復号化できなくなります。
于 2012-05-18T09:23:35.610 に答える