Kryptographie in Kotlin: Verschlüsselung und Hashing

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Kryptographie in Kotlin: Verschlüsselung und Hashing



Die moderne Entwicklung mit Kotlin (insbesondere für Android und Backend) erfordert oft die Implementierung kryptographischer Funktionen. In diesem Artikel betrachten wir die grundlegenden Ansätze zur Verschlüsselung und zum Hashing von Daten unter Verwendung von Kotlin und den Standardbibliotheken Java Cryptography Extension (JCE) und Bouncy Castle.



Grundlegende Konzepte

Kryptographie in Kotlin stützt sich auf die Fähigkeiten der JVM. Sie können Folgendes verwenden:

  • Symmetrische Verschlüsselung (AES, DES) — ein Schlüssel für Ver- und Entschlüsselung.
  • Asymmetrische Verschlüsselung (RSA) — ein Schlüsselpaar: öffentlicher und privater Schlüssel.
  • Hashing (SHA-256, MD5) — irreversible Datenumwandlung.
  • HMAC — Hashing mit einem geheimen Schlüssel zur Integritätsprüfung.


Projektkonfiguration

Für die meisten Beispiele reicht die Standard-Java-Bibliothek aus. Für erweiterte Algorithmen (z. B. AES mit GCM) fügen Sie die folgende Abhängigkeit in build.gradle.kts hinzu:

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


1. Symmetrische Verschlüsselung (AES)

AES ist der beliebteste Algorithmus. Beispiel für die Ver- und Entschlüsselung eines Strings:

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) // IV-Generierung java.security.SecureRandom().nextBytes(iv) cipher.init(Cipher.ENCRYPT_MODE, secretKey, IvParameterSpec(iv)) val encrypted = cipher.doFinal(plainText.toByteArray()) // Kombiniere IV und Chiffretext 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))}

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

val original = "Hello, Kotlin Crypto!" val encrypted = aesEncrypt(original, secretKey) println("Verschlüsselt: $encrypted")

val decrypted = aesDecrypt(encrypted, secretKey) println("Entschlüsselt: $decrypted")}


2. Asymmetrische Verschlüsselung (RSA)

RSA wird für die sichere Datenübertragung verwendet. Beispiel:

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 = "Geheime Nachricht" val encryp

Empfehlungen