我有一个Android应用程序,使用带有ECB和ZeroBytePadding的AES加密数据。在这种环境下一切正常:加密数据在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不是一种选择,因为许多消息已使用先前的选项加密。
答案 0 :(得分:0)
实际上确实没有这样的算法。在这里查看官方java文档http://docs.oracle.com/javase/7/docs/api/javax/crypto/Cipher.html