Note that there are some explanatory texts on larger screens.

plurals
  1. POGiven final block not properly padded
    primarykey
    data
    text
    <p>I am trying to implement password based encryption algorithm, but I get this exception:</p> <blockquote> <p>javax.crypto.BadPaddingException: Given final block not properly padded</p> </blockquote> <p>What might be the problem? (I am new to Java.)</p> <p>Here is my code:</p> <pre><code>public class PasswordCrypter { private Key key; public PasswordCrypter(String password) { try{ KeyGenerator generator; generator = KeyGenerator.getInstance("DES"); SecureRandom sec = new SecureRandom(password.getBytes()); generator.init(sec); key = generator.generateKey(); } catch (Exception e) { e.printStackTrace(); } } public byte[] encrypt(byte[] array) throws CrypterException { try{ Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding"); cipher.init(Cipher.ENCRYPT_MODE, key); return cipher.doFinal(array); } catch (Exception e) { e.printStackTrace(); } return null; } public byte[] decrypt(byte[] array) throws CrypterException{ try{ Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding"); cipher.init(Cipher.DECRYPT_MODE, key); return cipher.doFinal(array); } catch(Exception e ){ e.printStackTrace(); } return null; } } </code></pre> <p>(The JUnit Test)</p> <pre><code>public class PasswordCrypterTest { private static final byte[] MESSAGE = "Alpacas are awesome!".getBytes(); private PasswordCrypter[] passwordCrypters; private byte[][] encryptedMessages; @Before public void setUp() { passwordCrypters = new PasswordCrypter[] { new PasswordCrypter("passwd"), new PasswordCrypter("passwd"), new PasswordCrypter("otherPasswd") }; encryptedMessages = new byte[passwordCrypters.length][]; for (int i = 0; i &lt; passwordCrypters.length; i++) { encryptedMessages[i] = passwordCrypters[i].encrypt(MESSAGE); } } @Test public void testEncrypt() { for (byte[] encryptedMessage : encryptedMessages) { assertFalse(Arrays.equals(MESSAGE, encryptedMessage)); } assertFalse(Arrays.equals(encryptedMessages[0], encryptedMessages[2])); assertFalse(Arrays.equals(encryptedMessages[1], encryptedMessages[2])); } @Test public void testDecrypt() { for (int i = 0; i &lt; passwordCrypters.length; i++) { assertArrayEquals(MESSAGE, passwordCrypters[i].decrypt(encryptedMessages[i])); } assertArrayEquals(MESSAGE, passwordCrypters[0].decrypt(encryptedMessages[1])); assertArrayEquals(MESSAGE, passwordCrypters[1].decrypt(encryptedMessages[0])); try { assertFalse(Arrays.equals(MESSAGE, passwordCrypters[0].decrypt(encryptedMessages[2]))); } catch (CrypterException e) { // Anything goes as long as the above statement is not true. } try { assertFalse(Arrays.equals(MESSAGE, passwordCrypters[2].decrypt(encryptedMessages[1]))); } catch (CrypterException e) { // Anything goes as long as the above statement is not true. } } } </code></pre>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload