Java中的解密功能不适用于3DES

时间:2018-08-17 16:18:17

标签: java cryptography 3des

我试图了解自定义密码学库是否工作正常。

该库正在使用3DES,并且我认为用于加密文本的效果很好,因为一旦运行该构造函数便会自动生成密钥:

this.key = this.skf.generateSecret(this.ks);

,加密方案为“ DESede”

但是我关心的是解密,因为jar可能还会从DLL和使用的密钥中接收加密的文本,但是如果我查看代码,我认为由于使用了错误的密钥而无法正常工作...构造函数创建了一个新的!

public String decrypt(String encryptedString) {
String decryptedText = null;
try
{
  this.cipher.init(2, this.key);
  byte[] encryptedText = Base64.decodeBase64(encryptedString);
  byte[] plainText = this.cipher.doFinal(encryptedText);
  decryptedText = new String(plainText);
}
catch (Exception ex)
{
  Logger.getLogger(AgentBrideProtocol.class.getName()).log(Level.SEVERE, "Exception " + ex);
  Logger.getLogger(AgentBrideProtocol.class.getName()).log(Level.SEVERE, "Exception " + ex.getMessage());
  ex.printStackTrace();
}
return decryptedText;}

如何正常工作?

1 个答案:

答案 0 :(得分:0)

如果使用了错误的密钥,则文本将不会解密,或者至少不会正确解密。是的,如果您生成一个新密钥,它将是随机的,因此它将是具有很高确定性的错误密钥。

但是,从您问题中的可怕的代码片段来看,使用新密钥的事实并不明显。它使用this.key,我们不知道何时以及如何创建该密钥。如果它是使用SecretKeyFactory#generateSecret创建的,则可能会抛出BadPaddingException,或者,对于PKCS#7填充,大约会抛出256次,则返回随机的纯文本。

如果您只是从示例中复制了该代码,则应在此处停止,并首先了解密码学。 不好,如果它是库的一部分,则需要将该库删除。