AES Encryption error: javax.crypto.BadPaddingException
AES Encryption error: javax.crypto.BadPaddingException
此代码出现以下错误:javax.crypto.BadPaddingException:给定的最终块未正确填充。我指出了程序哪里出错了
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;
}
主要class:
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 和加密的新手,这是一项家庭作业。感谢您的帮助!我很感激。
您在加密和解密过程中使用了不同的密钥,因为它们是在两种方法中随机生成的。您必须使用 same 键。
向您的 class 添加一个 init
方法来一次生成密钥,或者在 class 之外生成密钥并将其传递给两种方法。
此代码出现以下错误:javax.crypto.BadPaddingException:给定的最终块未正确填充。我指出了程序哪里出错了
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;
}
主要class:
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 和加密的新手,这是一项家庭作业。感谢您的帮助!我很感激。
您在加密和解密过程中使用了不同的密钥,因为它们是在两种方法中随机生成的。您必须使用 same 键。
向您的 class 添加一个 init
方法来一次生成密钥,或者在 class 之外生成密钥并将其传递给两种方法。