0

我收到以下代码错误:javax.crypto.BadPaddingException: Given final block not proper padded。我指出了程序中发生错误的位置。

package aes;

import javax.crypto.*;
import java.security.*;
import javax.crypto.spec.SecretKeySpec;
import sun.misc.*;


public class AESencrpytion {

  //private static final byte[] keyValue = new byte[]{'S','e','c','r','e','t'};


  public static String encrypt(String data) throws Exception{
    KeyGenerator keyGen = KeyGenerator.getInstance("AES");
    SecureRandom rand = new SecureRandom();
    keyGen.init(rand);
    Key key = keyGen.generateKey();
    Cipher cipher = Cipher.getInstance("AES");
    cipher.init(Cipher.ENCRYPT_MODE, key);
    byte[] encValue = cipher.doFinal(data.getBytes());
    String encryptedValue = new BASE64Encoder().encode(encValue);
    return encryptedValue;
  }

  public static String decrypt(String encData) throws Exception {
    KeyGenerator keyGen = KeyGenerator.getInstance("AES");
    SecureRandom rand = new SecureRandom();
    keyGen.init(rand);
    Key key = keyGen.generateKey();
    Cipher cipher = Cipher.getInstance("AES");
    cipher.init(Cipher.DECRYPT_MODE, key);
    byte[] decodedValue = new BASE64Decoder().decodeBuffer(encData);
    //ERROR HAPPENS HERE
    byte[] decValue = cipher.doFinal(decodedValue);
    String decryptedVal = new String(decValue);
    return decryptedVal;
  }

主要类:

package aes;

public class AEStest {

  public static void main(String[] args) throws Exception {

    String password = "mypassword";
    String passwordEnc = AESencrpytion.encrypt(password);
    String passwordDec = AESencrpytion.decrypt(passwordEnc);

    System.out.println("Plain Text : " + password);
    System.out.println("Encrypted Text : " + passwordEnc);
    System.out.println("Decrypted Text : " + passwordDec);
  }
}

我是 AES 和加密的新手,这是一个家庭作业。感谢您的帮助!我很感激。

4

1 回答 1

0

您在加密和解密期间使用不同的密钥,因为它们是在两种方法中随机生成的。您必须使用相同的密钥。

向您的类添加一个init方法以生成一次密钥,或者在类外部生成密钥并将其传递给这两个方法。

于 2015-02-14T19:49:43.487 回答