Cryptographie en Kotlin : chiffrement et hachage avec exemples

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



Kotlin, en tant que langage moderne pour la JVM, donne accès à toutes les puissances de Java Cryptography Architecture (JCA). Cela permet de mettre en œuvre aussi bien le chiffrement symétrique (AES, DES) qu'asymétrique (RSA), ainsi que les fonctions de hachage cryptographique (SHA-256, MD5) et les signatures numériques. Dans cet article, nous analyserons des exemples pratiques d'utilisation de la cryptographie en Kotlin, utiles pour protéger les données dans les applications web, le développement mobile et les services backend.



Tous les exemples de code utilisent les capacités intégrées de Java, ce qui les rend multiplateformes et sans nécessité de bibliothèques supplémentaires.



1. Chiffrement symétrique AES en Kotlin



Le chiffrement symétrique utilise la même clé pour chiffrer et déchiffrer. L'algorithme AES (Advanced Encryption Standard) est la référence en matière de sécurité. Voici un exemple de chiffrement d'une chaîne avec le mode CBC et PKCS5Padding.



import javax.crypto.Cipherimport javax.crypto.KeyGeneratorimport javax.crypto.SecretKeyimport javax.crypto.spec.IvParameterSpecimport javax.crypto.spec.SecretKeySpecimport java.util.Base64

fun generateAESKey(): SecretKey { val keyGen = KeyGenerator.getInstance("AES") keyGen.init(256) // Longueur de clé : 128, 192 ou 256 bits return keyGen.generateKey()}

fun encryptAES(plainText: String, secretKey: SecretKey, iv: ByteArray): String { val cipher = Cipher.getInstance("AES/CBC/PKCS5Padding") val ivSpec = IvParameterSpec(iv) cipher.init(Cipher.ENCRYPT_MODE, secretKey, ivSpec) val encrypted = cipher.doFinal(plainText.toByteArray()) return Base64.getEncoder().encodeToString(encrypted)}

fun decryptAES(encryptedText: String, secretKey: SecretKey, iv: ByteArray): String { val cipher = Cipher.getInstance("AES/CBC/PKCS5Padding") val ivSpec = IvParameterSpec(iv) cipher.init(Cipher.DECRYPT_MODE, secretKey, ivSpec) val decoded = Base64.getDecoder().decode(encryptedText) val decrypted = cipher.doFinal(decoded) return String(decrypted)}

fun main() { val key = generateAESKey() val iv = ByteArray(16) // Vecteur d'initialisation (16 octets pour AES) // Dans un projet réel, iv doit être aléatoire et transmis avec le texte chiffré val original = "Привет, Kotlin!" val encrypted = encryptAES(original, key, iv) val decrypted = decryptAES(encrypted, key, iv) println("Оригинал: $original") println("Зашифровано: $encrypted") println("Расшифровано: $decrypted")}


Important : Le vecteur d'initialisation (IV) doit être aléatoire pour chaque chiffrement et transmis en clair avec les données chiffrées. N'utilisez jamais un IV fixe en production.



2. Chiffrement asymétrique RSA en Kotlin



RSA utilise une paire de clés : une clé publique pour le chiffrement et une clé privée pour le déchiffrement. C'est idéal pour le transfert sécurisé de données entre parties.



import java.security.KeyPairGeneratorimport java.security.PrivateKeyimport java.security.PublicKeyimport javax.crypto.Cipherimport java.util.Base64

fun generateRSAKeyPair(): Pair<PublicKey, PrivateKey> { val keyGen = KeyPairGenerator.getInstance("RSA") keyGen.initialize(2048) // Taille de clé recommandée val keyPair = keyGen.generateKeyPair() return Pair(keyPair.public, keyPair.private)}

fun encryptRSA(plainText: String, publicKey: PublicKey): String { val cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding") cipher.init(Cipher.ENCRYPT_MODE, publicKey) val encrypted = cipher.doFinal(plainText.toByteArray()) return Base64.getEncoder().encodeToString(encrypted)}

fun decryptRSA(encryptedText: String, privateKey: PrivateKey): String { val cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding") cipher.init(Cipher.DECRYPT_MODE, privateKey

Recommendations