2016-07-21 3 views
0

Я смог успешно зашифровать сообщение сгенерированным ключом. Теперь я пытаюсь добиться расшифровки, когда пользователь вводит ключ (hex) и там зашифрованное сообщение (hex). У меня возникает проблема при расшифровке зашифрованного сообщения (hex). Я получаю несколько NullPointerExceptions. Не могли бы вы помочь мне разобраться в решении этой проблемы?NullPointer Исключение при расшифровке AES

// Редактировать: Например, ключ (Hex): 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 при расшифровке с мягким шифра

ответ

0

Без контекста или номера строк трудно точно определить точную проблему. Вы должны проверить, где в коде генерируется исключение, и почему переменная, которую вы пытаетесь получить, равна null. Также проверьте this вопрос, как это было предложено Simze

Согласно Base64.Decoder documentation,

Если не указано иное, передавая пустой аргумент метода этого класса вызовет NullPointerException быть выброшен.

Итак, вы каким-то образом передаете ссылку на String ссылку на метод декодирования.

+0

Здравствуйте, Я добавил некоторые исправления в Исключение Null указателя. – Milan

+0

Ваш, скорее всего, правильный. Проблема заключается в том, что я беру в шестнадцатеричном значении, когда я сунул себя за простой текст. Любые идеи о том, как я могу скрывать гексагон в байтах? – Milan

+0

Как преобразовать строку (hex) в ключ seceret? – Milan

Смежные вопросы