BadPaddingException when decrypting AES with the same key

前端 未结 2 1318
盖世英雄少女心
盖世英雄少女心 2021-02-06 14:12

This is the tester:

public class CryptographySimpleTests extends ActivityTestCase
{
    public void testsCryptographyClass_encryptAndDecrypt()
    {
        fina         


        
相关标签:
2条回答
  • 2021-02-06 14:51

    You are eating an java.security.InvalidKeyException: Illegal key size or default parameters exception in your encryptAES and decryptAES methods. So don't eat them, either declare as throws or promote to RuntimeException.

    Turns out you have two problems, for this reason, you can't do 256, but 128 solves that, then you are also requesting CBC without an IvParameterSpec (Which is causing java.security.InvalidKeyException: Parameters missing). So supply that or change to ECB:

    public static byte[] encryptAES(byte[] key, byte[] inputValue)
            throws NoSuchPaddingException, BadPaddingException, IllegalBlockSizeException, NoSuchAlgorithmException, InvalidKeyException {
        SecretKeySpec sKeyS = new SecretKeySpec(key, "AES");
    
        Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
        cipher.init(Cipher.ENCRYPT_MODE, sKeyS);
    
        return cipher.doFinal(inputValue);
    }
    
    public static byte[] decryptAES(byte[] key, byte[] encryptedData)
            throws NoSuchPaddingException, BadPaddingException, IllegalBlockSizeException, NoSuchAlgorithmException, InvalidKeyException {
        SecretKeySpec sKeyS = new SecretKeySpec(key, "AES");
    
        Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
        cipher.init(Cipher.DECRYPT_MODE, sKeyS);
    
        return cipher.doFinal(encryptedData);
    }
    

    Key length:

    public static byte[] deriveAES256Key(String password)
                    throws InvalidKeySpecException, NoSuchAlgorithmException {
    
       ...
        int keyLength = 128; // 256-bits for AES-256, 128-bits for AES
       ...
    

    So I got it working like that, but step one is to stop eating the exception and you'll get better clues and probably work out on own.

    0 讨论(0)
  • 2021-02-06 14:57

    I'm using CBC without an IvParameterSpec.

    It was solved adding the following to encrypt and decrypt:

    cipher.init(Cipher."mode here", sKeyS, getIvSpecAES256()); 
    

    Where "getIvSpecAES256()" return the same value always.

    0 讨论(0)
提交回复
热议问题