我在 Android 和 Java servlet 环境中使用 AES 加密和充气城堡实现。加密部分在这两种情况下都可以。但是,一旦我用相同的密钥加密相同的文本,我会在这两个平台上得到不同的结果。
我的意图是在 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 实例中。
我也使用了 spongy castle 实现来看看我是否可以做到这一点。它仍然给了我与 Android 相同的结果。不确定我是否已正确加载它。我在 API 级别 14 和 17 上对此进行了测试。
这会导致 javax.crypto.BadPaddingException: pad block损坏。