[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")
}
위에서 언급된 기능들을 사용하여 코틀린으로 데이터를 안전하게 보호하고 보안을 강화할 수 있습니다.
참고 자료
- 코틀린 공식 문서: 코틀린 표준 라이브러리