Android と Java サーブレット環境の両方で、弾む城の実装で AES 暗号化を使用しています。暗号化部分は両方のシナリオで問題ありません。ただし、同じテキストを同じキーで暗号化すると、これら 2 つのプラットフォームで異なる結果が得られます。
私の意図は、Android で暗号化を行い、Web 環境で復号化を行うことです。
これは、Android AES 実装に対して行った唯一の変更です。
KeyGenerator kgen = KeyGenerator.getInstance("AES");
SecureRandom sr = null;
if (android.os.Build.VERSION.SDK_INT >= JELLY_BEAN_4_2) {
sr = SecureRandom.getInstance("SHA1PRNG", "Crypto");
} else {
sr = SecureRandom.getInstance("SHA1PRNG");
}
sr.setSeed(key);
kgen.init(128, sr);
SecretKey skey = kgen.generateKey();
byte[] raw = skey.getEncoded();
上記では、Crypto を get インスタンスに追加するだけです。
海綿状の城の実装も使用して、これを達成できるかどうかを確認しました。それでも、Android と同じ結果が得られました。正しく読み込めたかどうかわかりません。これを API レベル 14 および 17 でテストしました。
これにより、javax.crypto.BadPaddingException: パッド ブロックが壊れています。