반응형
https://www.veritas.com/ko/kr/information-center/aes-encryption
AES 암호화 관련 내용은 위 사이트를 참고하도록.
참고 자료
유저로 부터 받아온 전화번호를 복호화 하려고 한다.
나는 기존에 이미 키가 존재하기 때문에 key값과 iv값을 받아오는 코드는 따로 작성하였다.
키를 새로 생성해야 한다면 위에 블로그를 참고하자.
여기서는 임의의 코드를 직접 선언할 것이다.
object AES {
val k = "12345678901234567890123456789012"
val iv = "1234567890123456"
private fun getKey(): SecretKeySpec {
val secretKey = SecretKeySpec(k.toByteArray(Charsets.UTF_8), "AES")
return secretKey
}
private fun getIV(): IvParameterSpec {
val iv = iv
return IvParameterSpec(iv.toByteArray(Charsets.UTF_8))
}
//암호화
@Throws(Exception::class)
fun encryptCBC(textToEncrypt: String): String {
val keySpec = getKey()
val ivSpec = getIV()
val plainText = textToEncrypt.toByteArray(Charsets.UTF_8)
val cipher = Cipher.getInstance("AES/CBC/PKCS5PADDING")
cipher.init(Cipher.ENCRYPT_MODE, keySpec, ivSpec)
val ciphertext = cipher.doFinal(plainText)
return String(Base64.encode(ciphertext, Base64.DEFAULT))
}
//복호화
@Throws(Exception::class)
fun decryptCBC(encryptedText: String): String {
val keySpec = getKey()
val ivSpec = getIV()
val textToDecrypt = Base64.decode(encryptedText, Base64.DEFAULT)
val cipher = Cipher.getInstance("AES/CBC/PKCS5PADDING")
cipher.init(Cipher.DECRYPT_MODE, keySpec, ivSpec)
val decrypt = cipher.doFinal(textToDecrypt)
return String(decrypt, Charsets.UTF_8)
}
}
AES-256 방식으로 진행하였으며 여기서 기억해야할 점은
key값은 32비트 vi 값은 16비트인지 확인하자.
그리고 사용 알고리즘이 AES 인지 transformation이 CBC인지 패딩 설정은 어떤지
값 하나라도 달라지면 암호화 값이 달라진다.
보통 보편적으로 CBC방식과 AES/CBC/PKCS5PADDING 를 많이 사용한다.
끝.
+
참고로 저 코드는 php에서
$data = openssl_encrypt($str, 'AES-256-CBC', $KEY, 0 , $IV);
와 호환된다.
반응형
'Android' 카테고리의 다른 글
Android Progressbar 사용하기 (0) | 2024.08.26 |
---|---|
[Android] Printer 연동 (0) | 2024.08.05 |
Android 권한 받고 유저 핸드폰 번호 가져오기(feat. Kotlin) (0) | 2024.07.29 |
Android studio 버전 다른거 여러개 깔기 (1) | 2024.07.26 |
[삽질] Dialog 커스텀해서 쓰기 ! (input있는 dialog) (0) | 2024.06.12 |