반응형
AES
AES는 고급 암호화 표준으로
같은 Key를 이용하여 암호화/복호화가 가능한 암호화 알고리즘이다.
256은 32바이트의 암호화키를 사용하며
AES-128(16byte), 192(24byte), 256(32byte)의 세 종류가 있으며 256에 대해 알아보자.
Secret Key
Secret Key는 약속된 특정만 문장을 암호화 하는데 사용되며 보안을 위해 외부노출을 삼가야 한다.
AES의 종류에 따라 Secret Key의 길이가 달라지며 256은 32바이트의 길이를 사용한다.
Initialize Vector (초기화 벡터)
암호화를 하기 위한 키를 16byte의 길이로 잘라서 사용하는 벡터로
위의 Secret Key값을 잘라서 사용할 수 있다.
암호화 예시
public String encrypt(String text) throws Exception {
String alg = "AES/CBC/PKCS5Padding"; //AES를사용하기위한 선언
String key = "something_to_change_anything_key"; //사전에 약속된 암호화 키
String iv = key.substring(0, 16); //초기화 벡터 16byte로 자르기
Cipher cipher = Cipher.getInstance(alg);
SecretKeySpec keySpec = new SecretKeySpec(key.getBytes(), "AES"); //key로 Secret Key생성
IvParameterSpec ivParamSpec = new IvParameterSpec(iv.getBytes()); //초기화 백터
cipher.init(Cipher.ENCRYPT_MODE, keySpec, ivParamSpec);
byte[] encrypted = cipher.doFinal(text.getBytes("UTF-8"));
return Base64.getEncoder().encodeToString(encrypted);
}
복호화 예시
public String decrypt(String cipherText) throws Exception {
String alg = "AES/CBC/PKCS5Padding";
String key = "something_to_change_anything_key";
String iv = key.substring(0, 16);
Cipher cipher = Cipher.getInstance(alg);
SecretKeySpec keySpec = new SecretKeySpec(key.getBytes(), "AES");
IvParameterSpec ivParamSpec = new IvParameterSpec(iv.getBytes());
cipher.init(Cipher.DECRYPT_MODE, keySpec, ivParamSpec);
byte[] decodeBytes = Base64.getDecoder().decode(cipherText);
byte[] devrypted = cipher.doFinal(decodeBytes);
return new String(devrypted, "UTF-8");
}
참고
https://wildeveloperetrain.tistory.com/98
https://bamdule.tistory.com/234
반응형
'Language > Java' 카테고리의 다른 글
[Java] BigInteger 다루기 (백준 1247번 - 부호) (0) | 2023.04.12 |
---|---|
[Java] 트리 구현하기 (이진트리, 전위순회, 중위순회, 후위순회) (0) | 2023.04.08 |
[Base64][암호화] + 기호가 " "(공백) 으로 바뀌는 현상 (0) | 2023.03.13 |
[Java] UnsuoortedClassVersionError 52.0 에러 해결 방법 (0) | 2022.12.11 |
[Java] 코드 실행 시간 구하기 (시간 측정) (2) | 2022.12.02 |
댓글