首页 > 解决方案 > 尝试使用 Secretkey 解密数据时返回的错误

问题描述

我目前正在使用 DES 作为加密/解密数据的实践方法(我知道这不是行业惯例!)并且在解密时遇到错误(这是输出):

java.security.InvalidKeyException: Parameters missing
at com.sun.crypto.provider.CipherCore.init(CipherCore.java:469)
    at com.sun.crypto.provider.DESCipher.engineInit(DESCipher.java:186)
    at javax.crypto.Cipher.implInit(Cipher.java:802)
    at javax.crypto.Cipher.chooseProvider(Cipher.java:864)
    at javax.crypto.Cipher.init(Cipher.java:1249)
    at javax.crypto.Cipher.init(Cipher.java:1186)
    at CryptoPrac.Encrypt_Decrypt.Decrypt(Encrypt_Decrypt.java:68)
    at CryptoPrac.Crypto_Main.main(Crypto_Main.java:35)

这是我的代码:

public byte[] Decrypt(byte[] encrypted)
{
    try
    {
        KeyStore keyStore = KeyStore.getInstance("JCEKS");
        keyStore.load(new FileInputStream("output.jceks"), "password".toCharArray());
        SecretKey key = (SecretKey) keyStore.getKey("key", "password".toCharArray());
        System.out.println(key.toString());
        Cipher deCipher = Cipher.getInstance("DES/CBC/PKCS5Padding");
        deCipher.init(Cipher.DECRYPT_MODE, key);

        return deCipher.doFinal(encrypted);
    }
    catch (Exception e)
    {
        System.out.println(e.getMessage());
    }
    return null;
}

我认为我尝试将 getKey 转换为密钥可能是个问题,但我不知道该怎么做(密钥作为密钥存储在密钥库中,但是当我没有时它会返回错误)它在那里)。

编辑:我在我引用的库中有策略 .jars,因为我认为这可能是它们未被识别的问题。

标签: javaalgorithmencryptionkeystore

解决方案


当您deCipher使用该init()方法进行初始化时,IV 是必要的第三个参数。根据原始字符串的加密方式,将决定您如何获取该值。


推荐阅读