암호화 방식이 많이 있지만, 자주 사용하는 방식중에 하나인 AES256 이다.
[code]
public class AES256Util {
private String iv;
private Key keySpec;
public AES256Util(String key) 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;
}
// 암호화
public String encode(String str) throws UnsupportedEncodingException,
NoSuchAlgorithmException,
NoSuchPaddingException,
InvalidKeyException,
InvalidAlgorithmParameterException,
IllegalBlockSizeException,
BadPaddingException {
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.encodeToString(encrypted, 0));
return enStr;
}
//복호화
public String decode(String str) throws UnsupportedEncodingException,
NoSuchAlgorithmException,
NoSuchPaddingException,
InvalidKeyException,
InvalidAlgorithmParameterException,
IllegalBlockSizeException,
BadPaddingException {
Cipher c = Cipher.getInstance("AES/CBC/PKCS5Padding");
c.init(Cipher.DECRYPT_MODE, keySpec, new IvParameterSpec(iv.getBytes("UTF-8")));
byte[] byteStr = Base64.decode(str.getBytes(), 0);
return new String(c.doFinal(byteStr),"UTF-8");
}
}
[사용 예]
var aes = AES256Util("16자리_문자열의_your_secret_key")
var encStr = aes.encode("123456")
var decStr = aes.decode(encStr)
[주의사항]
여기서 주의할 점은 "key값"이 고정되어 있으면 같은 값이 나오기 때문에 실무에 사용할 때에는 암호화 할 때마다 "key"값을 바꿔주어야 한다는 것이다. 어려운 코드 아니니 그냥 긁어다가 쉽게 사용하도록 하자.
'프로그래밍 > android' 카테고리의 다른 글
android studio xml tab spacing (0) | 2020.11.17 |
---|---|
[android] 안드로이드 웹뷰 로컬 스토리지 사용하기 옵션 (webview local storage) (0) | 2020.11.10 |
[kotlin] 코틀린 null 처리 (.let) (0) | 2020.10.16 |
[kotlin] android EncryptedSharedPreferences example (0) | 2020.08.10 |
[kotlin] 안드로이드 코틀린 두 날짜 차이 계산 (4) | 2020.08.08 |