728x90
1. AES(Advanced Encryption Standard)란?
: 고급 암호화 표준, 대칭키를 쓰는 블럭 암호이다.
크기 | 라운드 수 |
128 bit | 10 |
192 bit | 12 |
256 bit | 14 |
2. 패딩(Padding)이란?
: 데이터를 특정 크기로 맞추고, 특정 크기보다 부족한 부분의 공간을 의미없는 문자들로 채워 비트수를 맞추는 것.
블럭 암호화 진행을 위해 패딩 기법이 필요함.
Cipher cipher = Cipher.getInstance("AES/CNC/PKCS5Padding"); |
3. AES256 암호화
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import org.apache.commons.codec.binary.Base64;
public String encrypt(String text) throws Exception{
String alg = "AES/CBC/PKCS5Padding";
String key = "32bit Secrety Key"; //32bit 비밀키
String iv = "initial vector"; //16bit 초기화 백터
String enStr="";
try{
//비밀키와 초기화 백터를 공유받았는데 base64로 인코딩되어있을 시, 디코딩을 해야한다.
byte[] keyByte = Base64.decodeBase64(key.getByte());
byte[] ivByte = Base64.decodeBase64(iv.getByte());
//암호화 시작
SecretKeySpec keySpec = new SecretKeySpec(keyByte, "AES");
IvParameterSpec ivParamSpec = new IvParameterSpec(ivByte);
Cipher cipher = Ciipher.getInstance(alg);
cipher.init(Cipher.ENCRYPT_MODE , keySpec, ivParamSpec);
btye[] encrypted = cipher.doFinal(text.getBytes("UTF-8"));
//AES256 으로 암호화 후 BASE64로 인코딩
EnStr = new String(Base64.encodeBase64(encrypted));
}catch(Exception e){
System.out.println("오류가 발생했습니다 : " + e.getMessage());
e.printStackTrace();
}
return enStr;
}
4. AES256 복호화
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import org.apache.commons.codec.binary.Base64;
public String decrypt(String text) throws Exception {
String alg = "AES/CBC/PKCS5Padding";
String key = "32bit Secrety Key"; //32bit 비밀키
String iv = "initial vector"; //16bit 초기화 백터
String deStr="";
try{
//비밀키와 초기화 백터를 공유받았는데 base64로 인코딩되어있을 시, 디코딩을 해야한다.
byte[] keyByte = Base64.decodeBase64(key.getBytes());
byte[] ivByte = Base64.decodeBase64(iv.getBytes());
//decodeing
SecretKeySpec keySpec = new SecretKeySpec(keyByte, "AES");
IvParameterSpec ivParamSpec = new IvParameterSpec(ivByte);
Cipher cipher = Cipher.getInstance(alg);
cipher.init(Cipher.DECRYPT_MODE, keySpec, ivParamSpec);
byte[] decodedBytes = Base64.decodeBase64(text.getBytes("UTF-8"));
byte[] decrypted = cipher.doFinal(decodedBytes);
deStr = new String(decrypted);
}catch(Exception e ){
System.out.println("오류가 발생했습니다 : "+e.getMessage());
e.printStackTrace();
}
return deStr;
}
'언어 > 자바' 카테고리의 다른 글
[JAVA IO]FileInputStream & FileOutputStream (0) | 2023.03.09 |
---|---|
쿠키(Cookie)와 세션(Session) (0) | 2022.11.22 |
자바 특수 문자, 정규식 처리 (0) | 2022.10.24 |
JSON 이란? (0) | 2022.10.24 |
API 연동(1)_ 토큰발급 (0) | 2022.10.21 |