Cipher.getInstance()失败,出现java.security.NoSuchAlgorithmException:找不到任何支持AES / ECB / ZeroBytePadding的提供程序

时间:2013-03-03 20:57:15

标签: android web-applications encryption-symmetric aescryptoserviceprovider

我有一个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不是一种选择,因为许多消息已使用先前的选项加密。

1 个答案:

答案 0 :(得分:0)

实际上确实没有这样的算法。在这里查看官方java文档http://docs.oracle.com/javase/7/docs/api/javax/crypto/Cipher.html