AES256.java
package com.smart.project.photo.biz;
import org.springframework.stereotype.Service;
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.util.Base64;
@Service
public class AES256 {
public static String alg = "AES/CBC/PKCS5Padding";
private final String key = "01234567890123456789012345678901";
private final String iv = key.substring(0, 16);
public String encrypt(String text) throws Exception {
Cipher cipher = Cipher.getInstance(alg);
SecretKeySpec keySpec = new SecretKeySpec(key.getBytes(), "AES");
IvParameterSpec ivParamSpec = new IvParameterSpec(iv.getBytes());
cipher.init(Cipher.ENCRYPT_MODE, keySpec, ivParamSpec);
byte[] encrypted = cipher.doFinal(text.getBytes("UTF-8"));
return Base64.getUrlEncoder().encodeToString(encrypted);
}
public String decrypt(String cipherText) throws Exception {
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[] decodedBytes = Base64.getUrlDecoder().decode(cipherText);
byte[] decrypted = cipher.doFinal(decodedBytes);
return new String(decrypted, "UTF-8");
}
}
- AES/CBC/PKCS5Padding -- 암호화 방식
- key -- 비밀 키 번호
- iv -- 바이트
AES
- 대칭키 암호화(암호화, 복호화 키 동일)
- 블록 암호
사용 이유
- 브라우저에 이미지 등 서버 URL노출을 막아줌
- 중요 정보를 DB에 넣을 때도 사용가능
'기초' 카테고리의 다른 글
Linux) 파일, 디렉토리 삭제 명령어 (0) | 2022.12.21 |
---|---|
Mapper Result id값 반환 (0) | 2022.11.30 |
쿠키, 세션 로그인 (0) | 2022.11.30 |
리눅스 vi(vim) 에디터 (0) | 2022.11.22 |
백엔드 개발자(Backend Developer)가 되기 위해 알아야 할 것들 (0) | 2022.11.17 |
댓글