Расшифровка AES, бросающая javax.crypto.BadPaddingException в java - PullRequest
0 голосов
/ 23 апреля 2020

Мой метод расшифровки AES вызывает исключение javax.crypto.BadPaddingException, и я не знаю, почему это происходит, поскольку я новичок в java и алгоритме шифрования AES. Я прошел через мой код с помощью отладчика и обнаружил Cipher cipher = Cipher.getInstance ("AES / ECB / PKCS5PADDING"); вызывает эту ошибку У кого-нибудь есть идеи, как решить эту проблему? Поэтому моя программа должна расшифровать массив зашифрованных строк AES, а метод шифрования предназначен только для тестирования.

Метод SetKey: -

public static void setKey(String myKey) {
    MessageDigest sha = null;
    try {
      key = myKey.getBytes("UTF-8");
      sha = MessageDigest.getInstance("SHA-1");
      key = sha.digest(key);
      key = Arrays.copyOf(key, 16);
      secretKey = new SecretKeySpec(key, "AES");

    } catch (NoSuchAlgorithmException e) {
      e.printStackTrace();
    } catch (UnsupportedEncodingException e) {
      e.printStackTrace();
    }
  } 

Метод расшифровки AES: -

public static String decrypt(String strToDecrypt, String secret) {

        try {

          setKey(secret);
          Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5PADDING");
          cipher.init(Cipher.DECRYPT_MODE, secretKey);
          return new String(cipher.doFinal(Base64.getDecoder().decode(strToDecrypt)));

        } catch (Exception e) {

          System.out.println("Error while encrypting " + e.toString());

        }

        return null;
      }

Метод шифрования AES: -

  public static String encrypt(String strToEncrypt, String secret) {
    try {

      setKey(secret);
      Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
      cipher.init(Cipher.ENCRYPT_MODE, secretKey);
      return Base64.getEncoder().encodeToString(cipher.doFinal(strToEncrypt.getBytes("UTF-8")));

    } catch (Exception e) {

      System.out.println("Error while encrypting " + e.toString());

    }

    return null;
  }

Основной метод: -

  public static void main(String[] args) {
   System.out.println(decrypt("kh4pOGsXY1cWiLsePjrpdbS9ZED7NKbzBiQ8GX9VrBg=","eC9UDz6zYZ3gJaxa"));

  }

}

Трассировка стека: -

Error while encrypting javax.crypto.BadPaddingException: Given final block not properly padded. Such issues can arise if a bad key is used during decryption.
null
...