我有一个使用带有 ECB 和 ZeroBytePadding 的 AES 加密数据的 Android 应用程序。在那种环境下一切正常:加密数据在 Android 中被解密没有问题,如下所示:
public static String encrypt(byte[] raw, byte[] clear) throws Exception {
SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
Cipher cipher = Cipher.getInstance("AES/ECB/ZeroBytePadding");
cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
byte[] encrypted = cipher.doFinal(clear);
return android.util.Base64.encodeToString(encrypted, android.util.Base64.NO_WRAP);
}
public static byte[] decrypt(byte[] raw, byte[] encrypted) throws Exception {
SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
Cipher cipher = Cipher.getInstance("AES/ECB/ZeroBytePadding");
cipher.init(Cipher.DECRYPT_MODE, skeySpec);
byte[] decrypted = cipher.doFinal(encrypted);
return decrypted;
}
但是,我最近决定在 Web 应用程序中解密数据,当我尝试使用相同的 decrypt() 方法时,Cipher.getInstance("AES/ECB/ZeroBytePadding") 抛出异常:
java.security.NoSuchAlgorithmException: Cannot find any provider supporting
AES/ECB/ZeroBytePadding
我假设某些 Android 库正在提供 javax.crypto.Cipher 中缺少的合适密码提供程序。有没有其他人遇到过这个问题或知道我能做些什么?将密码填充更改为 PKCS5PADDING 不是一个选项,因为许多消息已经使用早期选项加密。