无法克服 javax.crypto.BadPaddingException
Can't overcome the javax.crypto.BadPaddingException
我正在编写一个加密图像中文本的隐写术系统 - 我决定在将文本嵌入图片之前也对文本进行加密。隐写术算法适用于字符串 input/output.
由于一时兴起,我一直在尝试使用 DES 和 AES 算法,但 运行 进入了上面的异常。例如,我将展示 AES 算法的 encryption/decryption 方法:
public static byte[] encryptText(String plainText,SecretKey secKey) throws Exception{
// AES defaults to AES/ECB/PKCS5Padding in Java 7
Cipher aesCipher = Cipher.getInstance("AES");
aesCipher.init(Cipher.ENCRYPT_MODE, secKey);
byte[] byteCipherText = aesCipher.doFinal(plainText.getBytes());
return byteCipherText;}
public static String decryptText(byte[] byteCipherText, SecretKey secKey) throws Exception {
// AES defaults to AES/ECB/PKCS5Padding in Java 7
Cipher aesCipher = Cipher.getInstance("AES");
aesCipher.init(Cipher.DECRYPT_MODE, secKey);
byte[] bytePlainText = aesCipher.doFinal(byteCipherText);
return new String(bytePlainText);
}
这是调用(加密端):
//sending the text to encrypt using AES algorithm
byte[] cipherText = new AES_Algorithm().encrypt(messageDesc.getText(), key);
//converting into a String to encrypt using Steganography
newStringtoEncrypt = new String (cipherText);
这是调用(解密方)- 异常:
//AES encrypted String after the Steganography's decryption
String decMessage = dec.decode(path, name);
//converting the String to byte []
byte [] byteArray = decMessage.getBytes();
try{
//HERE IS WHERE I GET THE EXCEPTION
//sending the byte array to decryption
String original = AES_Algorithm().decrypt(byteArray, key);
问题出在哪里?
键很相似,字节数组也很相似(我通过打印序列来检查它)——但我被告知我不能使用 getBytes()
来从字符串转换为 byteArray
当我打算使用AES/DES
解密算法时。
加密的输出是二进制的,您不能像在以下代码中那样将其转换为 String
:
byte[] cipherText = new AES_Algorithm().encrypt(messageDesc.getText(), key);
//converting into a String to encrypt using Steganography
newStringtoEncrypt = new String (cipherText);
如果您需要String
这样的加密数据,您需要以某种方式对其进行编码,例如通过 base64encoding or by hexEncoding
我正在编写一个加密图像中文本的隐写术系统 - 我决定在将文本嵌入图片之前也对文本进行加密。隐写术算法适用于字符串 input/output.
由于一时兴起,我一直在尝试使用 DES 和 AES 算法,但 运行 进入了上面的异常。例如,我将展示 AES 算法的 encryption/decryption 方法:
public static byte[] encryptText(String plainText,SecretKey secKey) throws Exception{
// AES defaults to AES/ECB/PKCS5Padding in Java 7
Cipher aesCipher = Cipher.getInstance("AES");
aesCipher.init(Cipher.ENCRYPT_MODE, secKey);
byte[] byteCipherText = aesCipher.doFinal(plainText.getBytes());
return byteCipherText;}
public static String decryptText(byte[] byteCipherText, SecretKey secKey) throws Exception {
// AES defaults to AES/ECB/PKCS5Padding in Java 7
Cipher aesCipher = Cipher.getInstance("AES");
aesCipher.init(Cipher.DECRYPT_MODE, secKey);
byte[] bytePlainText = aesCipher.doFinal(byteCipherText);
return new String(bytePlainText);
}
这是调用(加密端):
//sending the text to encrypt using AES algorithm
byte[] cipherText = new AES_Algorithm().encrypt(messageDesc.getText(), key);
//converting into a String to encrypt using Steganography
newStringtoEncrypt = new String (cipherText);
这是调用(解密方)- 异常:
//AES encrypted String after the Steganography's decryption
String decMessage = dec.decode(path, name);
//converting the String to byte []
byte [] byteArray = decMessage.getBytes();
try{
//HERE IS WHERE I GET THE EXCEPTION
//sending the byte array to decryption
String original = AES_Algorithm().decrypt(byteArray, key);
问题出在哪里?
键很相似,字节数组也很相似(我通过打印序列来检查它)——但我被告知我不能使用 getBytes()
来从字符串转换为 byteArray
当我打算使用AES/DES
解密算法时。
加密的输出是二进制的,您不能像在以下代码中那样将其转换为 String
:
byte[] cipherText = new AES_Algorithm().encrypt(messageDesc.getText(), key);
//converting into a String to encrypt using Steganography
newStringtoEncrypt = new String (cipherText);
如果您需要String
这样的加密数据,您需要以某种方式对其进行编码,例如通过 base64encoding or by hexEncoding