티스토리 뷰
자바 암호화 - javax.crypto.BadPaddingException: Given final block not properly padded
xemaker 2017. 7. 18. 17:27위의 글에서 복호화에서 에러 나서 수정했는데 javax.crypto.BadPaddingException: Given final block not properly padded 에러가 났다.
알고보니 암호화할때 사요한 비밀키가 복호화 할시의 비밀키와 같이 않아서 생기는 오류였다.
그래서 암호화 할때는 키를 입력안했어도 에러가 나지는 않았지만 복호화 할때와 동일한 키를 사용해야 되서 복호화 할때와 똑같은 키를 써서 암호화를 했다.
그랬더니 이제야 에러가 나지 않고 정상적으로 동작하였다.
아래는 실제 돌아가는 전체 AES128 암호화 소스 이다.
public Key getAESKey() throws Exception {
String iv;
Key keySpec;
String key = "1234567890123456";
iv = key.substring(0, 16);
byte[] keyBytes = new byte[16];
byte[] b = key.getBytes("UTF-8");
int len = b.length;
if (len > keyBytes.length) {
len = keyBytes.length;
}
System.arraycopy(b, 0, keyBytes, 0, len);
keySpec = new SecretKeySpec(keyBytes, "AES");
return keySpec;
}
// 암호화
public String encAES(String str) throws Exception {
Key keySpec = getAESKey();
String str2 = "1234567890123456";
byte[] iv2 = str2.getBytes();
IvParameterSpec ivParameterSpec = new IvParameterSpec(iv2);
Cipher c = Cipher.getInstance("AES/CBC/PKCS5Padding");
c.init(Cipher.ENCRYPT_MODE, keySpec, ivParameterSpec);
byte[] encrypted = c.doFinal(str.getBytes("UTF-8"));
String enStr = new String(Base64.encodeBase64(encrypted));
return enStr;
}
// 복호화
public String decAES(String enStr) throws Exception {
Key keySpec = getAESKey();
String str = "1234567890123456";
byte[] iv = str.getBytes();
IvParameterSpec ivParameterSpec = new IvParameterSpec(iv);
Cipher c = Cipher.getInstance("AES/CBC/PKCS5Padding");
c.init(Cipher.DECRYPT_MODE, keySpec, ivParameterSpec);
byte[] byteStr = Base64.decodeBase64(enStr.getBytes("UTF-8"));
String decStr = new String(c.doFinal(byteStr), "UTF-8");
return decStr;
}
'자바(Java)' 카테고리의 다른 글
[Tomcat] 톰캣 startup bat 재시작 배치파일 만들기 (0) | 2017.08.08 |
---|---|
java에서 외부 프로세스 실행 processbuilder 및 결과 exitvalue 얻는 방법 (0) | 2017.08.02 |
자바 암호화 - java.security.InvalidKeyException: Parameters missing (0) | 2017.07.18 |
자바 암호화 - java encrypt (0) | 2017.07.18 |
자바 배열을 스트링으로 출력하기 (0) | 2017.07.06 |
- Total
- Today
- Yesterday
- Python
- 프로씨
- MySQL
- ocajp
- 플러터
- 포인터
- 파싱
- xe addon
- 파이썬
- proc
- C언어
- KG
- 라이믹스 모듈
- JDBC
- 문자열
- ocjap
- webix
- 스크래핑
- 자바 smtp
- 인포믹스
- php
- esql
- 자바
- C
- 이클립스
- xe애드온
- 오라클
- XE
- EC
- XE3
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |