生成された鍵でメッセージを正常に暗号化できました。今私は、ユーザーがキー(16進数)を入力し、暗号化されたメッセージ(16進数)を入力することによって解読を達成しようとしています。暗号化されたメッセージ(16進数)を復号化するときに問題が発生します。私は複数のNullPointerExceptionsを受け取ります。この問題の解決策を教えてください。AESを解読する際のNullPointer例外
//例:キー(16進数):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";
}
編集:
EXCEPTION: javax.crypto.IllegalBlockSizeException:任意のコンテキストまたは行番号なしパディング暗号
こんにちは、Nullポインタの例外にいくつかの編集を追加しました。 – Milan
あなたは一番正しいでしょう。問題は、私が平文を取っていることを提案したときに、私が16進数の価値を取っているという事実です。どのように私は16進数をバイトに変換することができますか? – Milan
文字列(16進数)をseceretキーに変換するにはどうすればよいですか? – Milan