Criptografia em Kotlin: criptografia e hashing
O desenvolvimento moderno em Kotlin (especialmente para Android e backend) frequentemente requer a implementação de funções criptográficas. Neste artigo, abordaremos as principais abordagens para criptografia e hashing de dados usando Kotlin e as bibliotecas padrão Java Cryptography Extension (JCE) e Bouncy Castle.
Conceitos básicos
A criptografia em Kotlin baseia-se nos recursos da JVM. Você pode usar:
- Criptografia simétrica (AES, DES) — uma chave para criptografar e descriptografar.
- Criptografia assimétrica (RSA) — um par de chaves: pública e privada.
- Hashing (SHA-256, MD5) — transformação irreversível de dados.
- HMAC — hashing com chave secreta para verificação de integridade.
Configuração do projeto
Para a maioria dos exemplos, a biblioteca padrão Java é suficiente. Para algoritmos avançados (por exemplo, AES com GCM), adicione a dependência em build.gradle.kts:
dependencies { implementation("org.bouncycastle:bcprov-jdk15on:1.70")}1. Criptografia simétrica (AES)
AES é o algoritmo mais popular. Exemplo de criptografia e descriptografia de uma string:
import javax.crypto.Cipherimport javax.crypto.KeyGeneratorimport javax.crypto.SecretKeyimport javax.crypto.spec.IvParameterSpecimport java.util.Base64
fun aesEncrypt(plainText: String, secretKey: SecretKey): String { val cipher = Cipher.getInstance("AES/CBC/PKCS5Padding") val iv = ByteArray(16) // Geração de IV java.security.SecureRandom().nextBytes(iv) cipher.init(Cipher.ENCRYPT_MODE, secretKey, IvParameterSpec(iv)) val encrypted = cipher.doFinal(plainText.toByteArray()) // Combina IV e texto cifrado val combined = iv + encrypted return Base64.getEncoder().encodeToString(combined)}
fun aesDecrypt(encryptedBase64: String, secretKey: SecretKey): String { val combined = Base64.getDecoder().decode(encryptedBase64) val iv = combined.copyOfRange(0, 16) val encrypted = combined.copyOfRange(16, combined.size) val cipher = Cipher.getInstance("AES/CBC/PKCS5Padding") cipher.init(Cipher.DECRYPT_MODE, secretKey, IvParameterSpec(iv)) return String(cipher.doFinal(encrypted))}
// Usofun main() { val keyGen = KeyGenerator.getInstance("AES") keyGen.init(256) val secretKey = keyGen.generateKey()
val original = "Hello, Kotlin Crypto!" val encrypted = aesEncrypt(original, secretKey) println("Criptografado: $encrypted")
val decrypted = aesDecrypt(encrypted, secretKey) println("Descriptografado: $decrypted")}2. Criptografia assimétrica (RSA)
RSA é usado para transmissão segura de dados. Exemplo:
import java.security.KeyPairGeneratorimport java.security.PrivateKeyimport java.security.PublicKeyimport javax.crypto.Cipherimport java.util.Base64
fun generateRSAKeyPair(): Pair<PublicKey, PrivateKey> { val generator = KeyPairGenerator.getInstance("RSA") generator.initialize(2048) val keyPair = generator.generateKeyPair() return Pair(keyPair.public, keyPair.private)}
fun rsaEncrypt(plainText: String, publicKey: PublicKey): String { val cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding") cipher.init(Cipher.ENCRYPT_MODE, publicKey) return Base64.getEncoder().encodeToString(cipher.doFinal(plainText.toByteArray()))}
fun rsaDecrypt(encryptedBase64: String, privateKey: PrivateKey): String { val cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding") cipher.init(Cipher.DECRYPT_MODE, privateKey) return String(cipher.doFinal(Base64.getDecoder().decode(encryptedBase64)))}
fun main() { val (publicKey, privateKey) = generateRSAKeyPair() val message = "Mensagem secreta" val encryp Também na biblioteca
NHibernate para C# (.NET): guia completo com exemplos
Envio de email em TypeScript: bibliotecas e exemplos de código
Geolocalização e mapas em Kotlin: bibliotecas, ferramentas e exemplos
Trabalhando com Excel em Kotlin: bibliotecas Apache POI e Apache POI para Kotlin