التشفير في Kotlin: التشفير والتجزئة مع أمثلة

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

التشفير في Kotlin: التشفير والتجزئة



Kotlin، كونه لغة حديثة لـ JVM، يوفر الوصول إلى جميع إمكانيات Java Cryptography Architecture (JCA). هذا يسمح بتنفيذ كل من التشفير المتماثل (AES، DES) وغير المتماثل (RSA)، بالإضافة إلى دوال التجزئة التشفيرية (SHA-256، MD5) والتوقيعات الرقمية. في هذه المقالة، سنستعرض أمثلة عملية لاستخدام التشفير في Kotlin، والتي ستكون مفيدة لحماية البيانات في تطبيقات الويب، وتطوير الأجهزة المحمولة، وخدمات الخلفية.



جميع أمثلة الكود تستخدم الإمكانيات المدمجة في Java، مما يجعلها متعددة المنصات ولا تتطلب مكتبات إضافية.



1. التشفير المتماثل AES في Kotlin



التشفير المتماثل يستخدم نفس المفتاح للتشفير وفك التشفير. خوارزمية AES (Advanced Encryption Standard) هي المعيار الذهبي للأمان. لنلقِ نظرة على مثال لتشفير سلسلة نصية باستخدام وضع CBC و 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) // طول المفتاح: 128 أو 192 أو 256 بت 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) // متجه التهيئة (16 بايت لـ AES) // في مشروع حقيقي، يجب أن يكون iv عشوائيًا ويتم نقله مع النص المشفر val original = "مرحبًا، Kotlin!" val encrypted = encryptAES(original, key, iv) val decrypted = decryptAES(encrypted, key, iv) println("الأصلي: $original") println("مشفر: $encrypted") println("مفكوك التشفير: $decrypted")}


هام: يجب أن يكون متجه التهيئة (IV) عشوائيًا لكل عملية تشفير ويتم نقله بشكل مفتوح مع البيانات المشفرة. لا تستخدم أبدًا IV ثابتًا في بيئة الإنتاج.



2. التشفير غير المتماثل RSA في Kotlin



RSA يستخدم زوجًا من المفاتيح: مفتاح عام (public) للتشفير ومفتاح خاص (private) لفك التشفير. هذا مثالي لنقل البيانات بشكل آمن بين الأطراف.



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) // الحجم الموصى به للمفتاح 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

توصيات