我试图了解自定义密码学库是否工作正常。
该库正在使用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;}
如何正常工作?
答案 0 :(得分:0)
如果使用了错误的密钥,则文本将不会解密,或者至少不会正确解密。是的,如果您生成一个新密钥,它将是随机的,因此它将是具有很高确定性的错误密钥。
但是,从您问题中的可怕的代码片段来看,使用新密钥的事实并不明显。它使用this.key
,我们不知道何时以及如何创建该密钥。如果它是使用SecretKeyFactory#generateSecret
创建的,则可能会抛出BadPaddingException
,或者,对于PKCS#7填充,大约会抛出256次,则返回随机的纯文本。
如果您只是从示例中复制了该代码,则应在此处停止,并首先了解密码学。 不好,如果它是库的一部分,则需要将该库删除。