Следующий код основан на криптографии. Внутри моего конструктора, я инициализирую это:Расшифровка IllegalBlockSizeException
try{
//To generate the secret key
KeyGenerator keyGen = KeyGenerator.getInstance("DES");
sKey = keyGen.generateKey();
//Initialize the cipher instance to use DES algorithm, ECB mode,
//and PKCS#5 padding scheme.
cipherObj = Cipher.getInstance("DES/ECB/PKCS5Padding");
}
catch(NoSuchAlgorithmException nsae){nsae.printStackTrace();
}
catch(NoSuchPaddingException nspe){nspe.printStackTrace();}
У меня есть этот код под кнопкой называется шифровать и его на самом деле работает
try{
//Initialize the cipher with secret key to encrypt the data.
cipherObj.init(Cipher.ENCRYPT_MODE, sKey);
//Read the data into byte array
byte[] textToEncrypt = txtTobeEncrypted.getText().getBytes();
//To encrypt the data
byte[] encryptedData = cipherObj.doFinal(textToEncrypt);
//Display the encrypted data
String encryptedText = new String(encryptedData);
txtEncryptOutput.setText(encryptedText);
}
catch(InvalidKeyException ivkey){ivkey.printStackTrace();}
catch(BadPaddingException bpe){bpe.printStackTrace();}
catch(IllegalBlockSizeException ilbs){ilbs.printStackTrace();}
Но следующий код, который находится под кнопкой Расшифровать не работает
try{
//Initialize the cipher with secret key to encrypt the data.
cipherObj.init(Cipher.DECRYPT_MODE, sKey);
//Read the data into byte array
byte[] textToDecrypt = txtEncryptOutput.getText().getBytes();
//To decrypt the data
byte[] plainData = cipherObj.doFinal(textToDecrypt);
//Display the encrypted data
String thePlainText = new String(plainData);
txtDecrypt.setText(thePlainText);
}
catch(InvalidKeyException ivkey){ivkey.printStackTrace();}
catch(BadPaddingException bpe){bpe.printStackTrace();}
catch(IllegalBlockSizeException ilbs){ilbs.printStackTrace();}
Исключение подводит выглядит следующим образом:
javax.crypto.IllegalBlockSizeException: Input length must be multiple of 8 when decrypting with padded cipher
at com.sun.crypto.provider.CipherCore.doFinal(CipherCore.java:750)
at com.sun.crypto.provider.CipherCore.doFinal(CipherCore.java:676)
at com.sun.crypto.provider.DESCipher.engineDoFinal(DESCipher.java:314)
at javax.crypto.Cipher.doFinal(Cipher.java:2086)
at cryptography.FileEncryption.cmdDecryptActionPerformed(FileEncryption.java:209)
Так что, пожалуйста, кто-нибудь может объяснить, почему я получаю это исключение?
Возможно, эта ссылка может вам помочь .. [JCE Encryption - стандартное шифрование данных (DES)] (http://www.mkyong.com/java/jce-encryption-data-encryption-standard-des-tutorial /) – Smit