[kotlin] 코틀린 표준 라이브러리에서 제공하는 암호화와 보안 기능

코틀린은 안전하고 안정적인 언어로, 표준 라이브러리에서도 다양한 보안 및 암호화 기능을 제공합니다. 이 기능들을 사용하여 데이터를 안전하게 보호하고 보안을 강화할 수 있습니다.

1. 문자열 해싱

코틀린 표준 라이브러리는 MessageDigest 클래스를 통해 다양한 해싱 알고리즘을 제공합니다. 문자열의 해시 값을 생성하는 데 사용할 수 있으며, 이를 통해 비밀번호와 같은 민감한 데이터를 안전하게 저장할 수 있습니다.

import java.security.MessageDigest

fun hashString(input: String, algorithm: String): String {
    val bytes = input.toByteArray()
    val digest = MessageDigest.getInstance(algorithm)
    val hashedBytes = digest.digest(bytes)
    return hashedBytes.joinToString("") { "%02x".format(it) }
}

fun main() {
    val originalString = "Hello, world!"
    val hashedString = hashString(originalString, "SHA-256")
    println("Original: $originalString")
    println("Hashed: $hashedString")
}

2. 암호화

코틀린에서는 javax.crypto 패키지를 통해 다양한 암호화 알고리즘을 활용할 수 있습니다. 이를 통해 데이터를 암호화하고 복호화할 수 있으며, 예를 들어 파일 또는 네트워크 통신을 안전하게 처리할 수 있습니다.

import java.security.SecureRandom
import javax.crypto.Cipher
import javax.crypto.KeyGenerator
import javax.crypto.spec.SecretKeySpec

fun encrypt(input: String, key: ByteArray): ByteArray {
    val cipher = Cipher.getInstance("AES/ECB/PKCS5Padding")
    cipher.init(Cipher.ENCRYPT_MODE, SecretKeySpec(key, "AES"))
    return cipher.doFinal(input.toByteArray())
}

fun decrypt(input: ByteArray, key: ByteArray): String {
    val cipher = Cipher.getInstance("AES/ECB/PKCS5Padding")
    cipher.init(Cipher.DECRYPT_MODE, SecretKeySpec(key, "AES"))
    val decryptedBytes = cipher.doFinal(input)
    return String(decryptedBytes)
}

fun main() {
    val originalString = "Hello, world!"
    val keyGen = KeyGenerator.getInstance("AES")
    keyGen.init(256, SecureRandom())
    val key = keyGen.generateKey().encoded

    val encryptedString = encrypt(originalString, key)
    println("Encrypted: ${String(encryptedString)}")

    val decryptedString = decrypt(encryptedString, key)
    println("Decrypted: $decryptedString")
}

3. 안전한 무작위 수 생성

암호화와 보안 기능을 사용할 때 안전한 난수 생성이 중요합니다. 코틀린에서는 java.security.SecureRandom 클래스를 활용하여 안전한 무작위 수를 생성할 수 있습니다. 이를 통해 보안적으로 안전한 암호 및 토큰을 생성할 수 있습니다.

import java.security.SecureRandom

fun generateSecureToken(length: Int): String {
    val secureRandom = SecureRandom()
    val token = ByteArray(length)
    secureRandom.nextBytes(token)
    return token.joinToString("") { "%02x".format(it) }
}

fun main() {
    val secureToken = generateSecureToken(16)
    println("Secure Token: $secureToken")
}

위에서 언급된 기능들을 사용하여 코틀린으로 데이터를 안전하게 보호하고 보안을 강화할 수 있습니다.

참고 자료