我目前正在使用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,因为我认为它们可能是一个无法被识别的问题。
答案 0 :(得分:2)
使用deCipher
方法初始化init()
时,IV是必要的第三个参数。根据原始字符串的加密方式,将决定如何获取此值。
答案 1 :(得分:1)
在“关键
之后,您错过了”请参阅您的代码
SecretKey key = (SecretKey) keyStore.getKey("key, "password".toCharArray());