私はAndroidアプリとスタンドアロンのJavaアプリで以下を使用しています:
private static byte[] encrypt(byte[] raw, byte[] clear) throws Exception {
SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
byte[] encrypted = cipher.doFinal(clear);
...
Android とスタンドアロンの Java アプリで異なる暗号化文字列を取得します (両方とも同じコードとキーを使用します)。この質問と同じ例外 (javax.crypto.BadPaddingException: Blocktype mismatch: 0) が発生します。
推奨される解決策は、次のようなパディング戦略を指定することです。
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
しかし、「RSA」ではなく「AES」を使用しており、AES と組み合わせてパディングを指定する方法がわかりません。その場合、Cipher.getInstance() に渡される文字列をどのように構築すればよいでしょうか? 私はこれを試してみました:
Cipher cipher = Cipher.getInstance("AES/PKCS1Padding");
しかし、それが無効であるという例外が発生します。
ありがとう