Cryptographie en Kotlin : chiffrement et hachage

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Cryptographie en Kotlin : chiffrement et hachage



Le développement moderne en Kotlin (notamment pour Android et le backend) nécessite souvent l'implémentation de fonctions cryptographiques. Dans cet article, nous examinerons les principales approches de chiffrement et de hachage des données en utilisant Kotlin et les bibliothèques standard Java Cryptography Extension (JCE) et Bouncy Castle.



Concepts de base

La cryptographie en Kotlin s'appuie sur les capacités de la JVM. Vous pouvez utiliser :

  • Chiffrement symétrique (AES, DES) — une seule clé pour le chiffrement et le déchiffrement.
  • Chiffrement asymétrique (RSA) — une paire de clés : publique et privée.
  • Hachage (SHA-256, MD5) — transformation irréversible des données.
  • HMAC — hachage avec une clé secrète pour vérifier l'intégrité.


Configuration du projet

Pour la plupart des exemples, la bibliothèque standard Java suffit. Pour les algorithmes avancés (par exemple, AES avec GCM), ajoutez la dépendance dans build.gradle.kts :

dependencies {    implementation("org.bouncycastle:bcprov-jdk15on:1.70")}


1. Chiffrement symétrique (AES)

AES est l'algorithme le plus populaire. Exemple de chiffrement et déchiffrement d'une chaîne :

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) // Génération de l'IV java.security.SecureRandom().nextBytes(iv) cipher.init(Cipher.ENCRYPT_MODE, secretKey, IvParameterSpec(iv)) val encrypted = cipher.doFinal(plainText.toByteArray()) // Combinaison de l'IV et du texte chiffré 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))}

// Utilisationfun main() { val keyGen = KeyGenerator.getInstance("AES") keyGen.init(256) val secretKey = keyGen.generateKey()

val original = "Hello, Kotlin Crypto!" val encrypted = aesEncrypt(original, secretKey) println("Chiffré : $encrypted")

val decrypted = aesDecrypt(encrypted, secretKey) println("Déchiffré : $decrypted")}


2. Chiffrement asymétrique (RSA)

RSA est utilisé pour la transmission sécurisée des données. Exemple :

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 = "Message secret" val encryp

Recommendations