有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

解密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) 个答案

  1. # 1 楼答案

    如果没有任何上下文或行号,就很难确定确切的问题。您应该检查在代码中引发异常的位置以及您试图访问的变量为null的原因。另请检查Simze建议的this问题

    根据 Base64.Decoder documentation报告

    Unless otherwise noted, passing a null argument to a method of this class will cause a NullPointerException to be thrown.

    因此,您以某种方式将空字符串引用传递给decode方法