这个问题可能是由于加密和解密时使用的填充方式不同导致的。填充方式不同可能会导致解密后得到错误的结果或者解密失败。解决方法是在加密和解密时都使用相同的填充方式。以下是一段使用PKCS#5填充的AES加密和解密示例代码:
import javax.crypto.*;
import javax.crypto.spec.*;
import org.apache.commons.codec.binary.Base64;
public class AesEncryption {
private static final String ALGO = "AES/CBC/PKCS5Padding";
private static final String KEY = "myaeskey";
private static final String IV = "myaesiviviviviv";
public static void main(String[] args) throws Exception {
String message = "Hello World";
System.out.println("Original Message: " + message);
String encrypted = encrypt(message);
System.out.println("Encrypted Message: " + encrypted);
String decrypted = decrypt(encrypted);
System.out.println("Decrypted Message: " + decrypted);
}
public static String encrypt(String message) throws Exception {
SecretKeySpec key = new SecretKeySpec(KEY.getBytes(), "AES");
IvParameterSpec iv = new IvParameterSpec(IV.getBytes());
Cipher cipher = Cipher.getInstance(ALGO);
cipher.init(Cipher.ENCRYPT_MODE, key, iv);
byte[] encryptedBytes = cipher.doFinal(message.getBytes());
return Base64.encodeBase64String(encryptedBytes);
}
public static String decrypt(String encrypted) throws Exception {
SecretKeySpec key = new SecretKeySpec(KEY.getBytes(), "AES");
IvParameterSpec iv = new IvParameterSpec(IV.getBytes());
Cipher cipher = Cipher.getInstance(ALGO);
cipher.init(Cipher.DECRYPT_MODE, key, iv);
byte[] decryptedBytes = cipher.doFinal(Base64.decodeBase64(encrypted));
return new String(decryptedBytes);
}
}
这是一个简单的使用AES CBC模式加密和解密的代码。它使用PKCS#5填充方式,以确保加密和解密时使用相同的填充方式。如果您使用其他的填充方式,请确保在加密和解密时都使用相同的填充方式。