Security Crypto для Kotlin: полное руководство с примерами

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс
Security Crypto Kotlin: методы, примеры, установка | PythonLib

Security Crypto для Kotlin: полное руководство с примерами

В современном мире разработки программного обеспечения безопасность данных является критически важным аспектом. Библиотека Security Crypto для Kotlin предоставляет мощный и удобный инструментарий для шифрования, дешифрования, хеширования и управления ключами. Эта статья представляет собой максимально подробное руководство по использованию библиотеки, начиная от установки и заканчивая сложными практическими примерами.

1. Что это и зачем нужна

Security Crypto — это библиотека для языка программирования Kotlin, предназначенная для выполнения криптографических операций. Она построена на основе стандартных криптографических алгоритмов (AES, RSA, SHA-256, HMAC и других) и предоставляет высокоуровневый API, который значительно упрощает работу с шифрованием по сравнению с использованием низкоуровневых Java Cryptography Extension (JCE) напрямую. Библиотека разработана с учетом лучших практик безопасности, что помогает разработчикам избегать типичных ошибок, таких как использование устаревших алгоритмов или неправильное управление ключами.

Зачем она нужна? В первую очередь, для защиты конфиденциальных данных: паролей, токенов доступа, персональной информации пользователей, банковских данных и любой другой информации, которая не должна быть доступна третьим лицам. Security Crypto позволяет легко реализовать шифрование данных в покое (например, в базе данных) и при передаче (например, через сеть). Кроме того, библиотека предоставляет функции для создания цифровых подписей, проверки целостности данных и безопасного хранения ключей. Это незаменимый инструмент для любого Kotlin-разработчика, работающего над проектами, где требуется высокий уровень безопасности.

Библиотека активно поддерживается сообществом и регулярно обновляется для соответствия современным стандартам безопасности. Она совместима с Kotlin Multiplatform, что позволяет использовать её в проектах для Android, iOS, JVM и JavaScript. Благодаря своей модульной архитектуре, Security Crypto легко интегрируется в существующие проекты и не требует сложной настройки.

2. Установка

Установка библиотеки Security Crypto осуществляется через систему управления зависимостями Gradle (для проектов Kotlin/JVM и Android) или Maven. Ниже приведены точные команды для добавления зависимости в ваш проект.

Для Gradle (Kotlin DSL)

// build.gradle.kts
dependencies {
    implementation("io.github.security-crypto:security-crypto-core:2.1.0")
    // Для Android добавьте также:
    implementation("io.github.security-crypto:security-crypto-android:2.1.0")
}

Для Gradle (Groovy DSL)

// build.gradle
dependencies {
    implementation 'io.github.security-crypto:security-crypto-core:2.1.0'
}

Для Maven

<dependency>
    <groupId>io.github.security-crypto</groupId>
    <artifactId>security-crypto-core</artifactId>
    <version>2.1.0</version>
</dependency>
Примечание: Версия 2.1.0 актуальна на момент написания статьи. Рекомендуется проверять последнюю версию на GitHub или в репозитории Maven Central.

3. Быстрый старт — минимальный рабочий пример

Давайте начнем с простейшего примера: шифрование и дешифрование строки с использованием симметричного алгоритма AES-256-GCM. Этот пример демонстрирует основные шаги: создание ключа, шифрование и дешифрование.

import io.github.securitycrypto.cipher.AesGcmCipher
import io.github.securitycrypto.key.SecretKeyGenerator
import io.github.securitycrypto.util.Base64

fun main() {
    // 1. Генерируем секретный ключ (256 бит)
    val secretKey = SecretKeyGenerator.generateAesKey(256)
    
    // 2. Создаем экземпляр шифратора AES-GCM
    val cipher = AesGcmCipher(secretKey)
    
    // 3. Исходные данные
    val plaintext = "Hello, Security Crypto! Это секретное сообщение."
    
    // 4. Шифрование
    val encryptedData = cipher.encrypt(plaintext.encodeToByteArray())
    println("Зашифрованные данные (Base64): ${Base64.encode(encryptedData)}")
    
    // 5. Дешифрование
    val decryptedData = cipher.decrypt(encryptedData)
    val decryptedText = decryptedData.decodeToString()
    println("Расшифрованные данные: $decryptedText")
    
    // Проверка
    require(plaintext == decryptedText) { "Ошибка: исходный и расшифрованный текст не совпадают!" }
    println("✅ Успех! Шифрование и дешифрование работают корректно.")
}
Совет: В реальных приложениях никогда не храните ключи в коде. Используйте безопасные хранилища, такие как Android Keystore или HashiCorp Vault.

4. Основные методы/функции/классы

Ниже приведены 8 ключевых компонентов библиотеки Security Crypto с подробным описанием и примерами использования.

4.1. SecretKeyGenerator.generateAesKey()

fun generateAesKey(keySize: Int): SecretKey

Что делает: Генерирует случайный симметричный ключ для алгоритма AES заданной длины. Поддерживаются размеры 128, 192 и 256 бит.

import io.github.securitycrypto.key.SecretKeyGenerator

fun exampleGenerateKey() {
    // Генерация 256-битного ключа
    val key256 = SecretKeyGenerator.generateAesKey(256)
    println("256-битный ключ: ${key256.encoded}")
    
    // Генерация 128-битного ключа
    val key128 = SecretKeyGenerator.generateAesKey(128)
    println("128-битный ключ: ${key128.encoded}")
    
    // Попытка сгенерировать ключ неподдерживаемого размера
    // SecretKeyGenerator.generateAesKey(64) // Выбросит IllegalArgumentException
}

4.2. AesGcmCipher.encrypt()

fun encrypt(plaintext: ByteArray): ByteArray

Что делает: Шифрует массив байтов с использованием алгоритма AES-256-GCM. Возвращает зашифрованные данные, которые включают nonce (12 байт), ciphertext и тег аутентификации (16 байт).

import io.github.securitycrypto.cipher.AesGcmCipher
import io.github.securitycrypto.key.SecretKeyGenerator

fun exampleEncrypt() {
    val key = SecretKeyGenerator.generateAesKey(256)
    val cipher = AesGcmCipher(key)
    
    val plaintext = "Sensitive data".encodeToByteArray()
    val encrypted = cipher.encrypt(plaintext)
    
    println("Размер зашифрованных данных: ${encrypted.size} байт")
    // Вывод: Размер зашифрованных данных: 45 байт (12 nonce + 17 ciphertext + 16 tag)
}

4.3. AesGcmCipher.decrypt()

fun decrypt(ciphertext: ByteArray): ByteArray

Что делает: Дешифрует данные, зашифрованные методом encrypt(). Если данные были повреждены или ключ неверен, выбрасывается исключение AEADBadTagException.

import io.github.securitycrypto.cipher.AesGcmCipher
import io.github.securitycrypto.key.SecretKeyGenerator

fun exampleDecrypt() {
    val key = SecretKeyGenerator.generateAesKey(256)
    val cipher = AesGcmCipher(key)
    
    val original = "Hello, world!".encodeToByteArray()
    val encrypted = cipher.encrypt(original)
    
    // Успешное дешифрование
    val decrypted = cipher.decrypt(encrypted)
    println("Расшифровано: ${decrypted.decodeToString()}") // Hello, world!
    
    // Попытка дешифрования с измененными данными
    val tampered = encrypted.copyOf()
    tampered[0] = tampered[0].xor(1) // Повреждаем первый байт
    try {
        cipher.decrypt(tampered)
    } catch (e: AEADBadTagException) {
        println("❌ Обнаружено повреждение данных: ${e.message}")
    }
}

4.4. RsaKeyPairGenerator.generateKeyPair()

fun generateKeyPair(keySize: Int): KeyPair

Что делает: Генерирует асимметричную пару ключей RSA (публичный и приватный) заданного размера. Рекомендуемый размер — 2048 или 4096 бит.

import io.github.securitycrypto.key.RsaKeyPairGenerator
import java.security.KeyPair

fun exampleRsaKeyPair() {
    val keyPair: KeyPair = RsaKeyPairGenerator.generateKeyPair(2048)
    
    val publicKey = keyPair.public
    val privateKey = keyPair.private
    
    println("Публичный ключ: ${publicKey.encoded}")
    println("Приватный ключ: ${privateKey.encoded}")
    println("Алгоритм: ${publicKey.algorithm}") // RSA
}

4.5. RsaOaepCipher.encrypt()

fun encrypt(plaintext: ByteArray, publicKey: PublicKey): ByteArray

Что делает: Шифрует данные с использованием алгоритма RSA-OAEP (Optimal Asymmetric Encryption Padding). Используется для шифрования небольших объемов данных (до 190 байт для ключа 2048 бит).

import io.github.securitycrypto.cipher.RsaOaepCipher
import io.github.securitycrypto.key.RsaKeyPairGenerator

fun exampleRsaEncrypt() {
    val keyPair = RsaKeyPairGenerator.generateKeyPair(2048)
    val cipher = RsaOaepCipher()
    
    val plaintext = "Secret message for RSA".encodeToByteArray()
    val encrypted = cipher.encrypt(plaintext, keyPair.public)
    
    println("Зашифровано RSA: ${encrypted.size} байт") // 256 байт для ключа 2048 бит
}

4.6. RsaOaepCipher.decrypt()

fun decrypt(ciphertext: ByteArray, privateKey: PrivateKey): ByteArray

Что делает: Дешифрует данные, зашифрованные с помощью RSA-OAEP, используя приватный ключ.

import io.github.securitycrypto.cipher.RsaOaepCipher
import io.github.securitycrypto.key.RsaKeyPairGenerator

fun exampleRsaDecrypt() {
    val keyPair = RsaKeyPairGenerator.generateKeyPair(2048)
    val cipher = RsaOaepCipher()
    
    val original = "RSA works!".encodeToByteArray()
    val encrypted = cipher.encrypt(original, keyPair.public)
    val decrypted = cipher.decrypt(encrypted, keyPair.private)
    
    println("Расшифровано RSA: ${decrypted.decodeToString()}") // RSA works!
}

Рекомендаций