解密AES时出现NullPointer异常

时间:2016-07-21 10:10:49

标签: java encryption cryptography

我能够使用生成的密钥成功加密邮件。现在我试图实现解密,用户可以输入密钥(十六进制)和加密消息(十六进制)。我在解密加密消息时遇到问题(十六进制)。我收到多个NullPointerExceptions。你能帮我找出解决这个问题的方法吗?

//编辑:例如键(十六进制):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:使用填充密码解密时,输入长度必须是16的倍数

1 个答案:

答案 0 :(得分:0)

没有任何上下文或行号,很难找出确切的问题。您应该检查代码中引发异常的位置以及您尝试访问的变量为空的原因。同时按照Simze的建议检查this问题

根据 Base64.Decoder documentation

  

除非另有说明,否则将null参数传递给此类的方法将导致抛出NullPointerException。

所以你以某种方式将null String引用传递给decode方法。