尝试使用Secretkey

时间:2018-06-08 16:54:12

标签: java algorithm encryption keystore

我目前正在使用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,因为我认为它们可能是一个无法被识别的问题。

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

在“关键

之后,您错过了

请参阅您的代码 SecretKey key = (SecretKey) keyStore.getKey("key, "password".toCharArray());