java - 尝试使用 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,因为我认为这可能是它们未被识别的问题。
解决方案
当您deCipher
使用该init()
方法进行初始化时,IV 是必要的第三个参数。根据原始字符串的加密方式,将决定您如何获取该值。
推荐阅读
- python - 为什么 python timeit 结果与 shell 的 time 命令相矛盾?
- python - 将由数字组成的长字符串转换为长二进制字符串
- python - 在pyqtgraph的ImageView中设置X和Y范围
- jquery - 如何创建一个按钮来隐藏和显示每个帖子的更多标签?
- python - 如何读取我自己的python代码生成的数据?
- excel - 多次使用内置排序函数会导致运行时错误:'1004' 排序引用无效
- r - .rda 是否仍可用于新版本的 R
- javascript - React 事件处理程序未在 Docusaurus 页面上执行
- python - Pandas DataFrame 之间的部分字符串匹配
- sql - 如何在表中查找计算字段