용테크
[JAVA] AES256 Cipher 본문
AES256 암호화
주로 평문 데이터를 암호화하는데 많이 쓰이며, 비밀키 하나로 데이터를 암호화 하고 복호화를 하며 사용하게 된다. 장점으로는 AES128과 비교하였을때는 당연히 보안성과 안전성이 높다고 말할수 있으며, 더 멀리 나아가 비대칭키(공개키 암호화시스템)보다 속도가 빠르다는 이점을 가지고 있다.
블록암호화를 진행하기 위해서는 패딩기법이 필요하다. 데이터를 특정크기로 맞추기 위해서, 특정크기보다 부족한 부분의 공간을 의미없는 문자들로 채워서 비트수를 맞추는 것이다.
Cipher c = Cipher.getInstance("AES/CBC/PKCS5Padding");
※ 안전한 암호화를 위한 AES 알고리즘에 대한 이해와 구현코드(Java, C#)
https://dailyworker.github.io/AES-Algorithm-and-Chiper-mode/
안전한 암호화를 위한 AES 알고리즘에 대한 이해와 구현코드(Java, C#)
개요오랜만에 쓰는 글입니다. 요 근래 정신이 너무 없어서 블로그 글도 못쓰고 있던 찰나에 인턴으로 근무하고 있는 회사에서 맡게 된 업무인 C# 암호화, Java 복호화에 대해서 설명하고자 합니다
dailyworker.github.io
Database의 접속정보 config파일에서 P/W가 평문으로 노출되고있어 AES256 암호화방식으로 암호화 해주었다.
String value= Cipher.encrypt("1234",IDataSourceInfo.VALUE_ENCRYPTION_KEY,CipherMode.AES256);
위의 코드는 자사 솔루션 패키지안에 포함되어있는 Cipher Class를 이용한 방식이고..(자사 솔루션으로 프로젝트 투입되었을때 사용하면 될것같다.) 아래와 같은 방식으로 AES256암호를 암호와, 복호화 하면된다.
public class AES256Util {
private String iv;
private Key keySpec;
/**
* 16자리의 키값을 입력하여 객체를 생성한다.
*
* @param key
* 암/복호화를 위한 키값
* @throws UnsupportedEncodingException
* 키값의 길이가 16이하일 경우 발생
*/
final static String key = "비밀키입력하는곳";
public AES256Util() throws UnsupportedEncodingException {
this.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);
SecretKeySpec keySpec = new SecretKeySpec(keyBytes, "AES");
this.keySpec = keySpec;
}
/**
* AES256 으로 암호화 한다.
*
* @param str
* 암호화할 문자열
* @return
* @throws NoSuchAlgorithmException
* @throws GeneralSecurityException
* @throws UnsupportedEncodingException
*/
public String encrypt(String str) throws NoSuchAlgorithmException,
GeneralSecurityException, UnsupportedEncodingException {
Cipher c = Cipher.getInstance("AES/CBC/PKCS5Padding");
c.init(Cipher.ENCRYPT_MODE, keySpec, new IvParameterSpec(iv.getBytes()));
byte[] encrypted = c.doFinal(str.getBytes("UTF-8"));
String enStr = new String(Base64.encodeBase64(encrypted));
return enStr;
}
/**
* AES256으로 암호화된 txt 를 복호화한다.
*
* @param str
* 복호화할 문자열
* @return
* @throws NoSuchAlgorithmException
* @throws GeneralSecurityException
* @throws UnsupportedEncodingException
*/
public String decrypt(String str) throws NoSuchAlgorithmException,
GeneralSecurityException, UnsupportedEncodingException {
Cipher c = Cipher.getInstance("AES/CBC/PKCS5Padding");
c.init(Cipher.DECRYPT_MODE, keySpec, new IvParameterSpec(iv.getBytes()));
byte[] byteStr = Base64.decodeBase64(str.getBytes());
return new String(c.doFinal(byteStr), "UTF-8");
}
}
'JAVA > Etc' 카테고리의 다른 글
| [JAVA] URL호출을 이용한 File Download (0) | 2020.07.30 |
|---|
Comments