Skip to content

مكتبة crypto — التشفير والأمان

مكتبة crypto توفر أدوات تشفير شاملة لحماية البيانات والتحقق من سلامتها. تشمل دوال التجزئة (MD5, SHA-256, SHA-512)، التشفير المتماثل (AES)، التشفير غير المتماثل (RSA)، التوقيعات الرقمية، تجزئة كلمات المرور، ترميز Base64 وHex، وتوليد أرقام عشوائية آمنة.

sad
استورد 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. التجزئة أحادية الاتجاه — لا يمكن استرجاع البيانات الأصلية منها.

sad
استورد crypto من "stdlib/crypto"

# تجزئة آية كريمة للتحقق من سلامة النقل
متغير الآية = "إِنَّا نَحْنُ نَزَّلْنَا الذِّكْرَ وَإِنَّا لَهُ لَحَافِظُونَ"
متغير تجزئة_256 = crypto.تجزئة(الآية، "sha256")
متغير تجزئة_512 = crypto.تجزئة(الآية، "sha512")

اطبع_سطر("SHA-256: " + تجزئة_256)
اطبع_سطر("SHA-512: " + تجزئة_512)

crypto.تحقق_تجزئة(بيانات، تجزئة، خوارزمية) — التحقق من التجزئة

تتحقق من أن التجزئة المُعطاة تطابق البيانات الأصلية. مقاومة لهجمات التوقيت (timing attacks) عبر استخدام مقارنة ثابتة الوقت.

sad
استورد crypto من "stdlib/crypto"

# التحقق من سلامة ملف
متغير المحتوى = "محتوى الوثيقة الإسلامية"
متغير التجزئة_المحفوظة = crypto.تجزئة(المحتوى، "sha256")

# لاحقاً: التحقق من سلامة المحتوى
متغير سليم = crypto.تحقق_تجزئة(المحتوى، التجزئة_المحفوظة، "sha256")
إذا (سليم)
    اطبع_سطر("✅ المحتوى سليم ولم يتغير")
وإلا
    اطبع_سطر("⚠️ تحذير: المحتوى تم تعديله!")
نهاية

HMAC — مصادقة الرسائل

crypto.hmac(مفتاح، بيانات، خوارزمية) — حساب HMAC

تحسب رمز مصادقة الرسالة المبني على التجزئة (HMAC). تجمع بين التجزئة والمفتاح السري لضمان أن البيانات لم تُعدَّل وأنها صادرة من مصدر موثوق.

sad
استورد crypto من "stdlib/crypto"

# توقيع رسالة للتحقق من هوية المرسل
متغير المفتاح_السري = "مفتاح-سري-آمن-جداً"
متغير الرسالة = "تم تحويل مبلغ 5000 ريال من حساب الزكاة"

متغير التوقيع = crypto.hmac(المفتاح_السري، الرسالة، "sha256")
اطبع_سطر("HMAC: " + التوقيع)

# التحقق
متغير صحيح = crypto.تحقق_hmac(المفتاح_السري، الرسالة، التوقيع، "sha256")
اطبع_سطر("التحقق: " + لنص(صحيح))

التشفير المتماثل (AES)

crypto.aes_شفر(نص، مفتاح، iv) — تشفير AES

تُشفّر النص باستخدام خوارزمية AES (Advanced Encryption Standard). تستخدم نفس المفتاح للتشفير وفك التشفير. تُرجع النص المُشفَّر بترميز Base64.

sad
استورد 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 بأمان لاستخدامهما لاحقاً في فك التشفير.

sad
استورد crypto من "stdlib/crypto"

# توليد مفتاح ومتجه تهيئة لتشفير أرشيف المكتبة
متغير المفتاح = crypto.ولّد_مفتاح(256)
متغير الـiv = crypto.ولّد_iv()
اطبع_سطر("تم توليد مفتاح AES-256 ومتجه التهيئة")

التشفير غير المتماثل (RSA)

crypto.rsa_ولّد_مفاتيح(حجم) — توليد زوج مفاتيح

تُولّد زوج مفاتيح RSA (عام وخاص). المفتاح العام يُستخدم للتشفير، والخاص لفك التشفير. الأحجام المدعومة: 1024, 2048, 4096 بت.

sad
استورد crypto من "stdlib/crypto"

# توليد مفاتيح لنظام المراسلات الآمنة
متغير المفاتيح = crypto.rsa_ولّد_مفاتيح(2048)
اطبع_سطر("المفتاح العام: " + المفاتيح.عام)
اطبع_سطر("المفتاح الخاص: " + المفاتيح.خاص)

crypto.rsa_شفر(نص، مفتاح_عام) / crypto.rsa_فك(نص، مفتاح_خاص)

تشفير وفك تشفير باستخدام RSA. يُستخدم المفتاح العام للتشفير والخاص لفك التشفير.

sad
استورد crypto من "stdlib/crypto"

# مراسلة آمنة بين مدير الوقف والمحاسب
متغير المفاتيح = crypto.rsa_ولّد_مفاتيح(2048)

متغير الرسالة = "ميزانية الوقف للربع الثالث: 1,500,000 ريال"
متغير المُشفَّر = crypto.rsa_شفر(الرسالة، المفاتيح.عام)
اطبع_سطر("الرسالة المُشفَّرة: " + المُشفَّر)

# المحاسب يفك التشفير بالمفتاح الخاص
متغير الأصلي = crypto.rsa_فك(المُشفَّر، المفاتيح.خاص)
اطبع_سطر("الرسالة: " + الأصلي)

crypto.وقّع(بيانات، مفتاح_خاص) / crypto.تحقق_توقيع(بيانات، توقيع، مفتاح_عام)

التوقيع الرقمي يضمن أن المستند صادر من صاحبه ولم يُعدَّل.

sad
استورد crypto من "stdlib/crypto"

# توقيع فتوى شرعية رقمياً
متغير المفاتيح = crypto.rsa_ولّد_مفاتيح(2048)

متغير الفتوى = "يجوز إخراج زكاة الفطر نقداً عند الحاجة"
متغير التوقيع = crypto.وقّع(الفتوى، المفاتيح.خاص)

# التحقق من أن الفتوى صادرة من المفتي
متغير موثّقة = crypto.تحقق_توقيع(الفتوى، التوقيع، المفاتيح.عام)
إذا (موثّقة)
    اطبع_سطر("✅ الفتوى موثّقة رقمياً")
وإلا
    اطبع_سطر("⚠️ لا يمكن التحقق من مصدر الفتوى")
نهاية

كلمات المرور

crypto.جزّئ_كلمة_مرور(كلمة_مرور) — تجزئة كلمة مرور

تُجزّئ كلمة المرور باستخدام bcrypt مع ملح عشوائي تلقائي. آمنة لتخزين كلمات المرور في قواعد البيانات. لا تخزّن كلمات المرور كنص عادي أبداً.

sad
استورد crypto من "stdlib/crypto"

# تسجيل مستخدم جديد في نظام المكتبة الإسلامية
متغير كلمة_المرور = "كلمة-مرور-قوية-123"
متغير التجزئة = crypto.جزّئ_كلمة_مرور(كلمة_المرور)
اطبع_سطر("التجزئة: " + التجزئة)
# يتم تخزين التجزئة فقط في قاعدة البيانات

crypto.تحقق_كلمة_مرور(كلمة_مرور، تجزئة) — التحقق

تتحقق من أن كلمة المرور تطابق التجزئة المُخزَّنة سابقاً.

sad
استورد crypto من "stdlib/crypto"

# تسجيل دخول المستخدم
متغير الإدخال = "كلمة-مرور-قوية-123"
متغير التجزئة_المحفوظة = "..."  # من قاعدة البيانات

متغير صحيحة = crypto.تحقق_كلمة_مرور(الإدخال، التجزئة_المحفوظة)
إذا (صحيحة)
    اطبع_سطر("تم تسجيل الدخول بنجاح")
وإلا
    اطبع_سطر("كلمة المرور غير صحيحة")
نهاية

الترميز

crypto.base64_رمّز(بيانات) / crypto.base64_فك(نص) — ترميز Base64

ترميز وفك ترميز البيانات بتنسيق Base64. مفيد لنقل البيانات الثنائية كنص.

sad
استورد crypto من "stdlib/crypto"

متغير النص = "لا إله إلا الله محمد رسول الله"
متغير المُرمَّز = crypto.base64_رمّز(النص)
اطبع_سطر("Base64: " + المُرمَّز)

متغير الأصلي = crypto.base64_فك(المُرمَّز)
اطبع_سطر("الأصلي: " + الأصلي)

crypto.hex_رمّز(بيانات) / crypto.hex_فك(نص) — ترميز Hex

ترميز وفك ترميز البيانات بالنظام الست عشري.

sad
استورد crypto من "stdlib/crypto"

متغير النص = "مرحباً"
متغير المُرمَّز = crypto.hex_رمّز(النص)
اطبع_سطر("Hex: " + المُرمَّز)

أرقام عشوائية آمنة

crypto.بايتات_عشوائية(طول) — بايتات عشوائية

تُولّد بايتات عشوائية آمنة تشفيرياً باستخدام مُولّد النظام.

sad
استورد crypto من "stdlib/crypto"

متغير البايتات = crypto.بايتات_عشوائية(32)
اطبع_سطر("بايتات عشوائية آمنة: " + crypto.hex_رمّز(البايتات))

crypto.uuid() — توليد UUID

تُولّد مُعرِّف فريد عالمي (UUID v4) عشوائي.

sad
استورد crypto من "stdlib/crypto"

# إنشاء معرّف فريد لكل معاملة
متغير معرّف_المعاملة = crypto.uuid()
اطبع_سطر("معرّف المعاملة: " + معرّف_المعاملة)

مثال شامل

sad
استورد crypto من "stdlib/crypto"

# نظام إدارة مستخدمي بوابة وقفية
اطبع_سطر("=== نظام التسجيل الآمن ===")
اطبع_سطر("")

# 1. تسجيل مستخدم جديد
متغير اسم_المستخدم = "أحمد_الوقفي"
متغير كلمة_المرور = "وقف@إسلامي#2024"
متغير تجزئة_المرور = crypto.جزّئ_كلمة_مرور(كلمة_المرور)
اطبع_سطر("تم تسجيل: " + اسم_المستخدم)

# 2. توليد مفاتيح RSA للتوقيع الرقمي
متغير المفاتيح = crypto.rsa_ولّد_مفاتيح(2048)
اطبع_سطر("تم توليد مفاتيح التوقيع الرقمي")

# 3. توقيع عقد وقف
متغير العقد = "عقد وقف أرض لصالح مسجد الحي - المساحة: 500 م²"
متغير التوقيع = crypto.وقّع(العقد، المفاتيح.خاص)
اطبع_سطر("تم توقيع العقد رقمياً")

# 4. حفظ بصمة العقد
متغير بصمة_العقد = crypto.تجزئة(العقد، "sha256")
اطبع_سطر("بصمة العقد: " + بصمة_العقد)

# 5. التحقق لاحقاً
متغير عقد_سليم = crypto.تحقق_توقيع(العقد، التوقيع، المفاتيح.عام)
متغير مرور_صحيح = crypto.تحقق_كلمة_مرور(كلمة_المرور، تجزئة_المرور)

إذا (عقد_سليم و مرور_صحيح)
    اطبع_سطر("✅ جميع عمليات التحقق ناجحة")
نهاية

مُرخَّص بموجب رخصة MIT