Criptografia em Kotlin: criptografia e hashes

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

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

Recommendations