0
我能够使用生成的密钥成功地加密消息。现在我正试图通过用户输入密钥(十六进制)和加密消息(十六进制)进行解密。解密加密邮件(十六进制)时遇到问题。我收到多个NullPointerExceptions。你能帮我找出解决这个问题的方法吗?解密AES时出现NullPointer异常
//编辑:例如键(十六进制):CFDD0F5311764F9EA56CF4126E304BC2 |加密的消息:C2A80A2B7A84A5A785E059F19322E5BA
private void executeDecryption() {
encryptMessageStr = messageEncryptTA.getText();
algorithmType = decryptAlgorithmTypeCB.getSelectionModel().getSelectedItem();
keyDecrypt = keyTF.getText();
if (!messageEncryptedTA.getText().isEmpty()) {
try {
//Using decryptText()
String textDecipher = decryptText(encryptedMessageStr, keyDecrypt);
messageEncryptedTA.setText(textDecipher);
} catch (Exception ex) {
MessageBox.display("Error!", "Could not decrypt message! Please try again later");
//System.out.println(ex.getMessage());
}
} else {
MessageBox.display("Warning!", "Please make sure message field is not empty!");
}
}
public static String decryptText(String encryptedMessageStr, String secretKey) {
try {
Key k = new SecretKeySpec(Base64.getDecoder().decode(secretKey), "AES");
Cipher cipherAES = Cipher.getInstance("AES");
cipherAES.init(Cipher.DECRYPT_MODE, k);
byte[] decodedValue = Base64.getDecoder().decode(encryptedMessageStr);
byte[] cipherTextBytes = cipherAES.doFinal(decodedValue);
String decryptedValue = new String(cipherTextBytes);
return decryptedValue;
} catch (Exception ex) {
ex.printStackTrace();
}
return "Error";
}
被修改:
例外: javax.crypto.IllegalBlockSizeException:带衬垫的密
你好,我已经添加了一些编辑到空指针异常。 – Milan
你很可能正确。问题在于,当我接受纯文本时,我正在接受一个十六进制值。关于如何将十六进制转换为字节的任何想法? – Milan
如何将字符串(十六进制)转换为seceret键? – Milan