2016-07-21 9 views
0

Ich konnte eine Nachricht erfolgreich mit einem generierten Schlüssel verschlüsseln. Jetzt versuche ich eine Entschlüsselung zu erreichen, bei der ein Benutzer einen Schlüssel (Hex) und eine verschlüsselte Nachricht (Hex) eingeben würde. Ich habe ein Problem beim Entschlüsseln der verschlüsselten Nachricht (Hex). Ich erhalte mehrere NullPointerExceptions. Könnten Sie mir bitte helfen, eine Lösung für dieses Problem zu finden?NullPointer Exception beim Entschlüsseln von AES

// Edit: Zum Beispiel der Schlüssel (Hex): CFDD0F5311764F9EA56CF4126E304BC2 | Verschlüsselte Nachricht: 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"; 

} 

Edited:

EXCEPTION: javax.crypto.IllegalBlockSizeException: Eingangslänge muss Vielfaches von 16 sein, wenn mit gepolstertem cipher

Antwort

0

Ohne Kontext oder Zeilennummern Entschlüsseln Es ist schwierig, das genaue Problem genau zu bestimmen. Sie sollten überprüfen, wo in Ihrem Code die Ausnahme ausgelöst wird und warum die Variable, auf die Sie zugreifen möchten, null ist. Überprüfen Sie auch this Frage, wie Simze vorgeschlagen

Nach dem Base64.Decoder documentation,

Wenn nicht anders angegeben, bewirkt, dass ein Null-Argument an eine Methode dieser Klasse vorbei eine Nullpointer geworfen werden.

Sie geben also eine Null-String-Referenz an die Dekodiermethode.

+0

Hallo, ich habe einige Änderungen an den Null-Zeiger-Ausnahmen hinzugefügt. – Milan

+0

Ihre am meisten korrekt. Das Problem ist die Tatsache, dass ich einen hexadezimalen Wert einnehme, wenn ich einen Klartext angenommen habe. Irgendwelche Ideen, wie ich das Hex in Bytes umwandeln kann? – Milan

+0

Wie konvertiere ich eine Zeichenfolge (Hex) in den Seceret-Schlüssel? – Milan