2016-07-21 5 views
0

生成された鍵でメッセージを正常に暗号化できました。今私は、ユーザーがキー(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:任意のコンテキストまたは行番号なしパディング暗号

答えて

0

と復号化するとき、入力の長さが16の倍数でなければなりません正確な問題を特定することは困難です。あなたのコードのどこで例外がスローされ、なぜアクセスしようとしている変数がnullであるのかを確認する必要があります。 Simze

により示唆されるように特に断りのない限りまた、NullPointerExceptionがスローされます。このクラスのメソッドにnull引数を渡す、 Base64.Decoder documentationによると、

this質問をご確認ください。

だから、あなたは何とかnull Stringリファレンスをdecodeメソッドに渡しています。

+0

こんにちは、Nullポインタの例外にいくつかの編集を追加しました。 – Milan

+0

あなたは一番正しいでしょう。問題は、私が平文を取っていることを提案したときに、私が16進数の価値を取っているという事実です。どのように私は16進数をバイトに変換することができますか? – Milan

+0

文字列(16進数)をseceretキーに変換するにはどうすればよいですか? – Milan