Android

[Android] AES-256로 개인정보 암호화 및 복호화 하기 feat.Kotlin

김한토 2024. 7. 31. 18:50
반응형

https://www.veritas.com/ko/kr/information-center/aes-encryption

고급 암호화 표준: AES 암호화에 대한 통합 가이드

www.veritas.com

AES 암호화 관련 내용은 위 사이트를 참고하도록.
 
 


참고 자료

Enhancing Data Privacy: AES-256 Encryption and Decryption in Android with Kotlin Example

AES (Advanced Encryption Standard) is a widely used symmetric encryption algorithm that ensures data confidentiality by encrypting and…

medium.com

 
유저로 부터 받아온 전화번호를 복호화 하려고 한다.
 
나는 기존에 이미 키가 존재하기 때문에 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);
 
와 호환된다.

반응형