일부 간단한 텍스트를 암호화하고 해독하려고합니다. 그러나 어떤 이유로 저는 이상한 오류가납니다 : javax.crypto.BadPaddingException
. JCE가 올바르게 패딩되어 있지 않은 바이트를 생성하는 이유는 무엇입니까?AES/CBC/PKCS5Padding 문제
나는 다음과 같은 코드가 있습니다
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.IvParameterSpec;
import java.security.SecureRandom;
public class SimplestTest {
public static void main(String[] args) throws Exception {
SecureRandom rnd = new SecureRandom();
String text = "Hello, my dear! ... " + System.getProperty("user.home");
byte[] textData = text.getBytes();
IvParameterSpec iv = new IvParameterSpec(rnd.generateSeed(16));
KeyGenerator generator = KeyGenerator.getInstance("AES");
generator.init(128);
SecretKey k = generator.generateKey();
Cipher c = Cipher.getInstance("AES/CBC/PKCS5Padding");
c.init(Cipher.ENCRYPT_MODE, k, iv);
c.update(textData);
byte[] data = c.doFinal();
System.out.println("E: " + data.length);
c = Cipher.getInstance("AES/CBC/PKCS5Padding");
c.init(Cipher.DECRYPT_MODE, k, iv);
c.update(data);
System.out.println("R: " + c.doFinal().length);
}
}
을하지만 어떤 이유로 작동하지 않습니다. 이 예외로 인해 실패합니다.
E: 16
Exception in thread "main" javax.crypto.BadPaddingException: Given final block not properly padded
at com.sun.crypto.provider.SunJCE_f.b(DashoA13*..)
at com.sun.crypto.provider.SunJCE_f.b(DashoA13*..)
at com.sun.crypto.provider.AESCipher.engineDoFinal(DashoA13*..)
at javax.crypto.Cipher.doFinal(DashoA13*..)
at SimplestTest.main(SimplestTest.java:31)
무슨 일입니까? 데이터 크기는 16 바이트이지만 여전히 "제대로 채워지지 않았습니다"?
고맙습니다. 이제 모든 것이 잘 작동합니다. –