如何修复错误异常java:error decryptAES无法初始化密码?

时间:2016-02-04 07:30:33

标签: java encryption java-7

我有一个例外,无法初始化密码,我无法解决它

这是代码:

public static String decryptAES(String dataEncrypt, String key) throws Exception {
    synchronized(decryptLock) {
        String dataDecrypted = new String();
        try {
            Cipher aesCipher = getAesCipher();
            byte[] raw = hexToBytes(key);
            SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
            aesCipher.init(Cipher.DECRYPT_MODE, skeySpec, aesCipher.getParameters());

            byte[] decordedValue = DatatypeConverter.parseBase64Binary(dataEncrypt);

            byte[] byteDecryptedText = aesCipher.doFinal(decordedValue);
            dataDecrypted = new String(byteDecryptedText);
            return dataDecrypted;
        } catch (Exception ex) {
            log.error("error decryptAES " +ex.getMessage());
        }

        return dataDecrypted;
    }

这是功能getAesCipher():

private static synchronized Cipher getAesCipher() throws NoSuchAlgorithmException, NoSuchPaddingException{
    if (_aesCipher == null) {
        _aesCipher = Cipher.getInstance("AES");
    }

    return _aesCipher;
}

有时查看日志,我看到日志错误异常,但我无法解决它

这是日志错误:

(EncryptManager.java:decryptRSA(82)) - running decryptRSA ....
  (EncryptManager.java:decryptAES(624)) - error decryptAES Could not initialize cipher

请帮帮我!感谢

1 个答案:

答案 0 :(得分:0)

在不知道更多信息的情况下,我建议您验证提供给方法的十六进制键值。我没有看到确切的错误消息,但是当初始化期间密钥参数对密码无效时,可以抛出InvalidKeyException(密钥不是算法的有效长度,密钥长度不受支持JVM,因为未安装JCE Unlimited Strength Jurisdiction Policy文件等)。

你是如何第一次实例化_aesCipher的?如果只是您发布的代码将其设置为Cipher的实例,则在致电cipher.init()时,您可能不需要传递参数。但是,您可能希望查看使用IV并传递IvParameterSpec以提高此代码的安全性。您还应该在实例化密码时指定mode of operation和填充方案,因为Java将默认为ECB,这是非常不安全的。