مكتبة crypto — التشفير والأمان
مكتبة crypto توفر أدوات تشفير شاملة لحماية البيانات والتحقق من سلامتها. تشمل دوال التجزئة (MD5, SHA-256, SHA-512)، التشفير المتماثل (AES)، التشفير غير المتماثل (RSA)، التوقيعات الرقمية، تجزئة كلمات المرور، ترميز Base64 وHex، وتوليد أرقام عشوائية آمنة.
استورد crypto من "stdlib/crypto"
# تجزئة نص باستخدام SHA-256
متغير التجزئة = crypto.تجزئة("بسم الله الرحمن الرحيم"، "sha256")
اطبع_سطر("SHA-256: " + التجزئة)ملخص الدوال
دوال التجزئة
| الدالة | الوصف |
|---|---|
crypto.تجزئة(بيانات، خوارزمية) | حساب تجزئة البيانات |
crypto.تحقق_تجزئة(بيانات، تجزئة، خوارزمية) | التحقق من صحة التجزئة |
HMAC
| الدالة | الوصف |
|---|---|
crypto.hmac(مفتاح، بيانات، خوارزمية) | حساب HMAC |
crypto.تحقق_hmac(مفتاح، بيانات، mac، خوارزمية) | التحقق من HMAC |
التشفير المتماثل (AES)
| الدالة | الوصف |
|---|---|
crypto.aes_شفر(نص، مفتاح، iv) | تشفير AES |
crypto.aes_فك(نص، مفتاح، iv) | فك تشفير AES |
crypto.ولّد_مفتاح(حجم) | توليد مفتاح عشوائي |
crypto.ولّد_iv() | توليد IV عشوائي |
التشفير غير المتماثل (RSA)
| الدالة | الوصف |
|---|---|
crypto.rsa_ولّد_مفاتيح(حجم) | توليد زوج مفاتيح |
crypto.rsa_شفر(نص، مفتاح_عام) | تشفير RSA |
crypto.rsa_فك(نص، مفتاح_خاص) | فك تشفير RSA |
crypto.وقّع(بيانات، مفتاح_خاص) | توقيع رقمي |
crypto.تحقق_توقيع(بيانات، توقيع، مفتاح_عام) | التحقق من التوقيع |
كلمات المرور
| الدالة | الوصف |
|---|---|
crypto.جزّئ_كلمة_مرور(كلمة_مرور) | تجزئة كلمة مرور |
crypto.تحقق_كلمة_مرور(كلمة_مرور، تجزئة) | التحقق من كلمة مرور |
الترميز
| الدالة | الوصف |
|---|---|
crypto.base64_رمّز(بيانات) | ترميز Base64 |
crypto.base64_فك(نص) | فك ترميز Base64 |
crypto.hex_رمّز(بيانات) | ترميز Hex |
crypto.hex_فك(نص) | فك ترميز Hex |
أرقام عشوائية آمنة
| الدالة | الوصف |
|---|---|
crypto.بايتات_عشوائية(طول) | بايتات عشوائية آمنة |
crypto.uuid() | توليد UUID v4 |
دوال التجزئة
crypto.تجزئة(بيانات، خوارزمية) — حساب التجزئة
تحسب تجزئة تشفيرية (hash) للبيانات المعطاة باستخدام الخوارزمية المحددة. الخوارزميات المدعومة: "md5", "sha1", "sha224", "sha256", "sha384", "sha512". تُرجع التجزئة كنص hex. التجزئة أحادية الاتجاه — لا يمكن استرجاع البيانات الأصلية منها.
استورد crypto من "stdlib/crypto"
# تجزئة آية كريمة للتحقق من سلامة النقل
متغير الآية = "إِنَّا نَحْنُ نَزَّلْنَا الذِّكْرَ وَإِنَّا لَهُ لَحَافِظُونَ"
متغير تجزئة_256 = crypto.تجزئة(الآية، "sha256")
متغير تجزئة_512 = crypto.تجزئة(الآية، "sha512")
اطبع_سطر("SHA-256: " + تجزئة_256)
اطبع_سطر("SHA-512: " + تجزئة_512)crypto.تحقق_تجزئة(بيانات، تجزئة، خوارزمية) — التحقق من التجزئة
تتحقق من أن التجزئة المُعطاة تطابق البيانات الأصلية. مقاومة لهجمات التوقيت (timing attacks) عبر استخدام مقارنة ثابتة الوقت.
استورد crypto من "stdlib/crypto"
# التحقق من سلامة ملف
متغير المحتوى = "محتوى الوثيقة الإسلامية"
متغير التجزئة_المحفوظة = crypto.تجزئة(المحتوى، "sha256")
# لاحقاً: التحقق من سلامة المحتوى
متغير سليم = crypto.تحقق_تجزئة(المحتوى، التجزئة_المحفوظة، "sha256")
إذا (سليم)
اطبع_سطر("✅ المحتوى سليم ولم يتغير")
وإلا
اطبع_سطر("⚠️ تحذير: المحتوى تم تعديله!")
نهايةHMAC — مصادقة الرسائل
crypto.hmac(مفتاح، بيانات، خوارزمية) — حساب HMAC
تحسب رمز مصادقة الرسالة المبني على التجزئة (HMAC). تجمع بين التجزئة والمفتاح السري لضمان أن البيانات لم تُعدَّل وأنها صادرة من مصدر موثوق.
استورد crypto من "stdlib/crypto"
# توقيع رسالة للتحقق من هوية المرسل
متغير المفتاح_السري = "مفتاح-سري-آمن-جداً"
متغير الرسالة = "تم تحويل مبلغ 5000 ريال من حساب الزكاة"
متغير التوقيع = crypto.hmac(المفتاح_السري، الرسالة، "sha256")
اطبع_سطر("HMAC: " + التوقيع)
# التحقق
متغير صحيح = crypto.تحقق_hmac(المفتاح_السري، الرسالة، التوقيع، "sha256")
اطبع_سطر("التحقق: " + لنص(صحيح))التشفير المتماثل (AES)
crypto.aes_شفر(نص، مفتاح، iv) — تشفير AES
تُشفّر النص باستخدام خوارزمية AES (Advanced Encryption Standard). تستخدم نفس المفتاح للتشفير وفك التشفير. تُرجع النص المُشفَّر بترميز Base64.
استورد crypto من "stdlib/crypto"
# تشفير بيانات حساسة
متغير المفتاح = crypto.ولّد_مفتاح(256) # مفتاح AES-256
متغير الـiv = crypto.ولّد_iv()
متغير البيانات = "رقم الحساب البنكي: SA1234567890"
متغير المُشفَّر = crypto.aes_شفر(البيانات، المفتاح، الـiv)
اطبع_سطر("المُشفَّر: " + المُشفَّر)
# فك التشفير
متغير الأصلي = crypto.aes_فك(المُشفَّر، المفتاح، الـiv)
اطبع_سطر("الأصلي: " + الأصلي)crypto.ولّد_مفتاح(حجم) / crypto.ولّد_iv()
تُولّد مفتاح AES عشوائي بالحجم المحدد (128, 192, أو 256 بت) ومتجه تهيئة (IV) عشوائي. يجب حفظ المفتاح والـ IV بأمان لاستخدامهما لاحقاً في فك التشفير.
استورد crypto من "stdlib/crypto"
# توليد مفتاح ومتجه تهيئة لتشفير أرشيف المكتبة
متغير المفتاح = crypto.ولّد_مفتاح(256)
متغير الـiv = crypto.ولّد_iv()
اطبع_سطر("تم توليد مفتاح AES-256 ومتجه التهيئة")التشفير غير المتماثل (RSA)
crypto.rsa_ولّد_مفاتيح(حجم) — توليد زوج مفاتيح
تُولّد زوج مفاتيح RSA (عام وخاص). المفتاح العام يُستخدم للتشفير، والخاص لفك التشفير. الأحجام المدعومة: 1024, 2048, 4096 بت.
استورد crypto من "stdlib/crypto"
# توليد مفاتيح لنظام المراسلات الآمنة
متغير المفاتيح = crypto.rsa_ولّد_مفاتيح(2048)
اطبع_سطر("المفتاح العام: " + المفاتيح.عام)
اطبع_سطر("المفتاح الخاص: " + المفاتيح.خاص)crypto.rsa_شفر(نص، مفتاح_عام) / crypto.rsa_فك(نص، مفتاح_خاص)
تشفير وفك تشفير باستخدام RSA. يُستخدم المفتاح العام للتشفير والخاص لفك التشفير.
استورد crypto من "stdlib/crypto"
# مراسلة آمنة بين مدير الوقف والمحاسب
متغير المفاتيح = crypto.rsa_ولّد_مفاتيح(2048)
متغير الرسالة = "ميزانية الوقف للربع الثالث: 1,500,000 ريال"
متغير المُشفَّر = crypto.rsa_شفر(الرسالة، المفاتيح.عام)
اطبع_سطر("الرسالة المُشفَّرة: " + المُشفَّر)
# المحاسب يفك التشفير بالمفتاح الخاص
متغير الأصلي = crypto.rsa_فك(المُشفَّر، المفاتيح.خاص)
اطبع_سطر("الرسالة: " + الأصلي)crypto.وقّع(بيانات، مفتاح_خاص) / crypto.تحقق_توقيع(بيانات، توقيع، مفتاح_عام)
التوقيع الرقمي يضمن أن المستند صادر من صاحبه ولم يُعدَّل.
استورد crypto من "stdlib/crypto"
# توقيع فتوى شرعية رقمياً
متغير المفاتيح = crypto.rsa_ولّد_مفاتيح(2048)
متغير الفتوى = "يجوز إخراج زكاة الفطر نقداً عند الحاجة"
متغير التوقيع = crypto.وقّع(الفتوى، المفاتيح.خاص)
# التحقق من أن الفتوى صادرة من المفتي
متغير موثّقة = crypto.تحقق_توقيع(الفتوى، التوقيع، المفاتيح.عام)
إذا (موثّقة)
اطبع_سطر("✅ الفتوى موثّقة رقمياً")
وإلا
اطبع_سطر("⚠️ لا يمكن التحقق من مصدر الفتوى")
نهايةكلمات المرور
crypto.جزّئ_كلمة_مرور(كلمة_مرور) — تجزئة كلمة مرور
تُجزّئ كلمة المرور باستخدام bcrypt مع ملح عشوائي تلقائي. آمنة لتخزين كلمات المرور في قواعد البيانات. لا تخزّن كلمات المرور كنص عادي أبداً.
استورد crypto من "stdlib/crypto"
# تسجيل مستخدم جديد في نظام المكتبة الإسلامية
متغير كلمة_المرور = "كلمة-مرور-قوية-123"
متغير التجزئة = crypto.جزّئ_كلمة_مرور(كلمة_المرور)
اطبع_سطر("التجزئة: " + التجزئة)
# يتم تخزين التجزئة فقط في قاعدة البياناتcrypto.تحقق_كلمة_مرور(كلمة_مرور، تجزئة) — التحقق
تتحقق من أن كلمة المرور تطابق التجزئة المُخزَّنة سابقاً.
استورد crypto من "stdlib/crypto"
# تسجيل دخول المستخدم
متغير الإدخال = "كلمة-مرور-قوية-123"
متغير التجزئة_المحفوظة = "..." # من قاعدة البيانات
متغير صحيحة = crypto.تحقق_كلمة_مرور(الإدخال، التجزئة_المحفوظة)
إذا (صحيحة)
اطبع_سطر("تم تسجيل الدخول بنجاح")
وإلا
اطبع_سطر("كلمة المرور غير صحيحة")
نهايةالترميز
crypto.base64_رمّز(بيانات) / crypto.base64_فك(نص) — ترميز Base64
ترميز وفك ترميز البيانات بتنسيق Base64. مفيد لنقل البيانات الثنائية كنص.
استورد crypto من "stdlib/crypto"
متغير النص = "لا إله إلا الله محمد رسول الله"
متغير المُرمَّز = crypto.base64_رمّز(النص)
اطبع_سطر("Base64: " + المُرمَّز)
متغير الأصلي = crypto.base64_فك(المُرمَّز)
اطبع_سطر("الأصلي: " + الأصلي)crypto.hex_رمّز(بيانات) / crypto.hex_فك(نص) — ترميز Hex
ترميز وفك ترميز البيانات بالنظام الست عشري.
استورد crypto من "stdlib/crypto"
متغير النص = "مرحباً"
متغير المُرمَّز = crypto.hex_رمّز(النص)
اطبع_سطر("Hex: " + المُرمَّز)أرقام عشوائية آمنة
crypto.بايتات_عشوائية(طول) — بايتات عشوائية
تُولّد بايتات عشوائية آمنة تشفيرياً باستخدام مُولّد النظام.
استورد crypto من "stdlib/crypto"
متغير البايتات = crypto.بايتات_عشوائية(32)
اطبع_سطر("بايتات عشوائية آمنة: " + crypto.hex_رمّز(البايتات))crypto.uuid() — توليد UUID
تُولّد مُعرِّف فريد عالمي (UUID v4) عشوائي.
استورد crypto من "stdlib/crypto"
# إنشاء معرّف فريد لكل معاملة
متغير معرّف_المعاملة = crypto.uuid()
اطبع_سطر("معرّف المعاملة: " + معرّف_المعاملة)مثال شامل
استورد crypto من "stdlib/crypto"
# نظام إدارة مستخدمي بوابة وقفية
اطبع_سطر("=== نظام التسجيل الآمن ===")
اطبع_سطر("")
# 1. تسجيل مستخدم جديد
متغير اسم_المستخدم = "أحمد_الوقفي"
متغير كلمة_المرور = "وقف@إسلامي#2024"
متغير تجزئة_المرور = crypto.جزّئ_كلمة_مرور(كلمة_المرور)
اطبع_سطر("تم تسجيل: " + اسم_المستخدم)
# 2. توليد مفاتيح RSA للتوقيع الرقمي
متغير المفاتيح = crypto.rsa_ولّد_مفاتيح(2048)
اطبع_سطر("تم توليد مفاتيح التوقيع الرقمي")
# 3. توقيع عقد وقف
متغير العقد = "عقد وقف أرض لصالح مسجد الحي - المساحة: 500 م²"
متغير التوقيع = crypto.وقّع(العقد، المفاتيح.خاص)
اطبع_سطر("تم توقيع العقد رقمياً")
# 4. حفظ بصمة العقد
متغير بصمة_العقد = crypto.تجزئة(العقد، "sha256")
اطبع_سطر("بصمة العقد: " + بصمة_العقد)
# 5. التحقق لاحقاً
متغير عقد_سليم = crypto.تحقق_توقيع(العقد، التوقيع، المفاتيح.عام)
متغير مرور_صحيح = crypto.تحقق_كلمة_مرور(كلمة_المرور، تجزئة_المرور)
إذا (عقد_سليم و مرور_صحيح)
اطبع_سطر("✅ جميع عمليات التحقق ناجحة")
نهاية