Case StudyDone

نظام إدارة كلمات المرور المشفرة

مكتبة Libsodium توفر وظائف تشفير آمن تشمل التشفير بالمفتاح السري والعام، التجزئة، تجزئة كلمات المرور، وتوليد بيانات عشوائية، مع شرح مبسط لتثبيتها على أنظمة Unix وWindows واستخدامها للمبتدئين.

1 يوليو 2026
1 التقنيات
English
نظام إدارة كلمات المرور المشفرة

عن هذا المشروع

مكتبة Libsodium توفر وظائف تشفير آمن تشمل التشفير بالمفتاح السري والعام، التجزئة، تجزئة كلمات المرور، وتوليد بيانات عشوائية، مع شرح مبسط لتثبيتها على أنظمة Unix وWindows واستخدامها للمبتدئين.

التقنيات

Lab

مشروع مصغر: نظام إدارة كلمات المرور المشفرة 🔐

نظرة عامة

سنبني مدير كلمات مرور بسيط باستخدام Libsodium يتيح لك:

  • حفظ كلمات المرور بشكل مشفر
  • استرجاع كلمات المرور بعد فك التشفير
  • تطبيق جميع المفاهيم الأساسية للتشفير

المدة المقدرة: 3-4 ساعات


📋 خط السير التعليمي

المرحلة 1: الإعداد والتثبيت (30 دقيقة)

الخطوات:

  1. تثبيت المكتبة

    # على Linux/Mac
    sudo apt-get install libsodium-dev
    
    # أو استخدام pip للنسخة Python
    pip install pynacl
  2. إنشاء مجلد المشروع

    mkdir password_manager
    cd password_manager
  3. اختبار التثبيت

    import nacl.secret
    import nacl.utils
    print("Libsodium جاهزة!")

المرحلة 2: فهم التشفير الأساسي (45 دقيقة)

🎯 المفاهيم التي ستتعلمها:

  • توليد المفاتيح العشوائية
  • التشفير بالمفتاح السري
  • فك التشفير

التطبيق العملي:

import nacl.secret
import nacl.utils

class="token comment"># 1. توليد مفتاح سري عشوائي
key = nacl.utils.random(nacl.secret.SecretBox.KEY_SIZE)
print(f"المفتاح: {key.hex()}")

class="token comment"># 2. إنشاء صندوق التشفير
box = nacl.secret.SecretBox(key)

class="token comment"># 3. تشفير رسالة
message = b"كلمة المرور السرية: MyP@ssw0rd123"
encrypted = box.encrypt(message)
print(f"النص المشفر: {encrypted.hex()}")

class="token comment"># 4. فك التشفير
decrypted = box.decrypt(encrypted)
print(f"النص الأصلي: {decrypted.decode(class="token string">'utf-8')}")

تمرين: جرب تشفير كلمات مرور مختلفة وتأكد من فهمك للعملية.


المرحلة 3: بناء المشروع الأساسي (90 دقيقة)

الملف: password_manager.py

import nacl.secret
import nacl.utils
import nacl.pwhash
import json
import getpass
from pathlib import Path

class PasswordManager:
    def __init__(self, master_password):
        """تهيئة مدير كلمات المرور"""
        class="token comment"># توليد مفتاح من كلمة المرور الرئيسية
        self.key = self._derive_key(master_password)
        self.box = nacl.secret.SecretBox(self.key)
        self.storage_file = "passwords.enc"

    def _derive_key(self, password):
        """توليد مفتاح من كلمة المرور باستخدام التجزئة الآمنة"""
        salt = bclass="token string">'fixed_salt_12345'  class="token comment"># في الإنتاج، استخدم salt عشوائي
        return nacl.pwhash.argon2i.kdf(
            nacl.secret.SecretBox.KEY_SIZE,
            password.encode(class="token string">'utf-8'),
            salt
        )

    def add_password(self, service, username, password):
        """إضافة كلمة مرور جديدة"""
        passwords = self._load_passwords()

        class="token comment"># تشفير كلمة المرور
        encrypted_password = self.box.encrypt(password.encode(class="token string">'utf-8'))

        passwords[service] = {
            class="token string">'username': username,
            class="token string">'password': encrypted_password.hex()
        }

        self._save_passwords(passwords)
        print(f"✅ تم حفظ كلمة مرور {service}")

    def get_password(self, service):
        """استرجاع كلمة مرور"""
        passwords = self._load_passwords()

        if service not in passwords:
            print(f"❌ لا توجد كلمة مرور لـ {service}")
            return None

        class="token comment"># فك تشفير كلمة المرور
        encrypted_hex = passwords[service][class="token string">'password']
        encrypted = bytes.fromhex(encrypted_hex)
        decrypted = self.box.decrypt(encrypted)

        return {
            class="token string">'username': passwords[service][class="token string">'username'],
            class="token string">'password': decrypted.decode(class="token string">'utf-8')
        }

    def list_services(self):
        """عرض جميع الخدمات المحفوظة"""
        passwords = self._load_passwords()
        return list(passwords.keys())

    def _load_passwords(self):
        """تحميل كلمات المرور من الملف"""
        if not Path(self.storage_file).exists():
            return {}

        with open(self.storage_file, class="token string">'r') as f:
            return json.load(f)

    def _save_passwords(self, passwords):
        """حفظ كلمات المرور في الملف"""
        with open(self.storage_file, class="token string">'w') as f:
            json.dump(passwords, f, indent=2)

class="token comment"># واجهة المستخدم
def main():
    print("=" * 50)
    print("🔐 مدير كلمات المرور المشفرة")
    print("=" * 50)

    master_password = getpass.getpass("أدخل كلمة المرور الرئيسية: ")
    pm = PasswordManager(master_password)

    while True:
        print("\n--- القائمة ---")
        print("1. إضافة كلمة مرور")
        print("2. استرجاع كلمة مرور")
        print("3. عرض جميع الخدمات")
        print("4. خروج")

        choice = input("\nاختر (1-4): ")

        if choice == class="token string">'1':
            service = input("اسم الخدمة (مثل: Gmail): ")
            username = input("اسم المستخدم: ")
            password = getpass.getpass("كلمة المرور: ")
            pm.add_password(service, username, password)

        elif choice == class="token string">'2':
            service = input("اسم الخدمة: ")
            data = pm.get_password(service)
            if data:
                print(f"\n📧 المستخدم: {data[class="token string">'username']}")
                print(f"🔑 كلمة المرور: {data[class="token string">'password']}")

        elif choice == class="token string">'3':
            services = pm.list_services()
            print(f"\n📋 الخدمات المحفوظة ({len(services)}):")
            for s in services:
                print(f"  - {s}")

        elif choice == class="token string">'4':
            print("👋 وداعاً!")
            break

if __name__ == "__main__":
    main()

المرحلة 4: التحسينات والتعلم المتقدم (45 دقيقة)

تحسينات مقترحة:

  1. إضافة التحقق من قوة كلمة المرور
def check_password_strength(password):
    """التحقق من قوة كلمة المرور"""
    score = 0
    if len(password) >= 8: score += 1
    if any(c.isupper() for c in password): score += 1
    if any(c.islower() for c in password): score += 1
    if any(c.isdigit() for c in password): score += 1
    if any(c in class="token string">'!@class="token comment">#$%^&*' for c in password): score += 1

    strength = [class="token string">'ضعيفة جداً', class="token string">'ضعيفة', class="token string">'متوسطة', class="token string">'قوية', class="token string">'قوية جداً']
    return strength[min(score, 4)]
  1. توليد كلمات مرور عشوائية قوية
import secrets
import string

def generate_password(length=16):
    """توليد كلمة مرور عشوائية قوية"""
    alphabet = string.ascii_letters + string.digits + class="token string">'!@class="token comment">#$%^&*'
    password = class="token string">''.join(secrets.choice(alphabet) for _ in range(length))
    return password
  1. حذف كلمة مرور
def delete_password(self, service):
    """حذف كلمة مرور"""
    passwords = self._load_passwords()
    if service in passwords:
        del passwords[service]
        self._save_passwords(passwords)
        print(f"✅ تم حذف {service}")
    else:
        print(f"❌ لا توجد كلمة مرور لـ {service}")

المرحلة 5: الاختبار والتوثيق (30 دقيقة)

سيناريوهات الاختبار:

  1. ✅ إضافة 3 كلمات مرور مختلفة
  2. ✅ استرجاع كلمة مرور محفوظة
  3. ✅ محاولة استرجاع كلمة مرور غير موجودة
  4. ✅ إغلاق البرنامج وإعادة فتحه (للتأكد من الحفظ)
  5. ✅ استخدام كلمة مرور رئيسية خاطئة

توثيق ما تعلمته:

أنشئ ملف README.md:

# مدير كلمات المرور المشفرة

## المفاهيم المطبقة:
- ✅ التشفير بالمفتاح السري (Symmetric Encryption)
- ✅ تجزئة كلمات المرور (Password Hashing - Argon2)
- ✅ توليد البيانات العشوائية الآمنة
- ✅ التخزين الآمن للبيانات

## الدروس المستفادة:
1. كيفية استخدام Libsodium للتشفير
2. أهمية عدم تخزين كلمات المرور بشكل نصي
3. استخدام التجزئة لتوليد مفاتيح من كلمات المرور

🎓 ملخص المهارات المكتسبة

المهارة المستوى
التشفير بالمفتاح السري ⭐⭐⭐
تجزئة كلمات المرور ⭐⭐⭐
توليد البيانات العشوائية ⭐⭐
التعامل مع الملفات المشفرة ⭐⭐⭐
بناء تطبيق CLI ⭐⭐

📚 موارد إضافية للتعمق

  1. التوثيق الرسمي: https://doc.libsodium.org/
  2. أمثلة متقدمة: التشفير بالمفتاح العام، التوقيعات الرقمية
  3. التحدي التالي: بناء نسخة بواجهة رسومية (GUI)

✅ قائمة التحقق النهائية

  • تثبيت Libsodium بنجاح
  • فهم التشفير/فك التشفير الأساسي
  • بناء المشروع الأساسي
  • إضافة 3 تحسينات على الأقل
  • اختبار جميع الوظائف
  • توثيق ما تعلمته

نصيحة أخيرة: لا تقلق إذا استغرق الأمر أكثر من 4 ساعات قليلاً. المهم هو الفهم العميق وليس السرعة! 🚀

هل تريد البدء الآن؟ أخبرني إذا واجهت أي مشكلة في أي مرحلة! 💪

روابط المشروع

تاريخ البداية1 يوليو 2026
الحالةDone

مشاركة المشروع

< i99dev />

مطور Full-Stack يصنع تجارب ويب حديثة بكود نظيف وحلول مبتكرة.

تواصل

[email protected]
الإمارات، أبوظبي

© 2026 i99dev. جميع الحقوق محفوظة.