解密AES时出现java空指针异常
我能够用生成的密钥成功加密消息。现在,我正在尝试实现解密,用户可以通过它输入一个密钥(十六进制)并加密消息(十六进制)。我在解密加密消息(十六进制)时遇到问题。我收到多个NullPointerException。你能帮我找出解决这个问题的办法吗
//编辑:例如键(十六进制):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。加密。IllegalBlockSizeException:使用填充密码解密时,输入长度必须是16的倍数
# 1 楼答案
如果没有任何上下文或行号,就很难确定确切的问题。您应该检查在代码中引发异常的位置以及您试图访问的变量为null的原因。另请检查Simze建议的this问题
根据 Base64.Decoder documentation报告
因此,您以某种方式将空字符串引用传递给decode方法