أساسيات التشفير — أمن الشبكات
أساسيات التشفير (Cryptography)
ما هو التشفير؟
تحويل البيانات إلى صيغة غير مقروءة لحمايتها.
أنواع التشفير
1. التشفير المتماثل (Symmetric)
- مفتاح واحد للتشفير وفك التشفير
- سريع ولكن توزيع المفتاح صعب
- أمثلة: AES, DES, 3DES
2. التشفير غير المتماثل (Asymmetric)
- مفتاحان: عام (public) وخاص (private)
- أبطأ ولكن أكثر أماناً
- أمثلة: RSA, ECC
3. دوال الهاش (Hashing)
- تحويل أحادي الاتجاه
- للتحقق من سلامة البيانات
- أمثلة: MD5 ⚠️, SHA-256, bcrypt
استخدامات التشفير
- 🔐 حماية كلمات المرور (hashing)
- 📧 تشفير الرسائل
- 🌐 HTTPS (TLS/SSL)
- 💳 المعاملات المالية
- 📱 تشفير الهواتف
قواعد مهمة
1. لا تخترع تشفيرك الخاص!
2. استخدم مكتبات موثوقة
3. MD5 و SHA-1 لم تعد آمنة للتشفير
4. أطوال المفاتيح المناسبة:
- AES: 256 bit
- RSA: 2048+ bit
# أمثلة على التشفير في Python
import hashlib
from cryptography.fernet import Fernet
import bcrypt
# ===== 1. Hashing مع SHA-256 =====
def hash_sha256(data):
"""تشفير نص باستخدام SHA-256"""
return hashlib.sha256(data.encode()).hexdigest()
# مثال
password = "MySecretPassword123"
hashed = hash_sha256(password)
print(f"SHA-256: {hashed}")
# ===== 2. تشفير كلمات المرور مع bcrypt =====
def hash_password(password):
"""تشفير كلمة مرور بشكل آمن"""
salt = bcrypt.gensalt(rounds=12)
return bcrypt.hashpw(password.encode(), salt)
def verify_password(password, hashed):
"""التحقق من كلمة المرور"""
return bcrypt.checkpw(password.encode(), hashed)
# مثال
hashed_pw = hash_password("MyPassword123")
print(f"bcrypt: {hashed_pw}")
print(f"صحيح: {verify_password('MyPassword123', hashed_pw)}")
print(f"خاطئ: {verify_password('WrongPassword', hashed_pw)}")
# ===== 3. تشفير متماثل مع Fernet =====
def encrypt_message(message, key):
"""تشفير رسالة"""
f = Fernet(key)
return f.encrypt(message.encode())
def decrypt_message(encrypted, key):
"""فك تشفير رسالة"""
f = Fernet(key)
return f.decrypt(encrypted).decode()
# توليد مفتاح
key = Fernet.generate_key()
print(f"المفتاح: {key}")
# تشفير وفك تشفير
message = "رسالة سرية جداً!"
encrypted = encrypt_message(message, key)
print(f"مشفر: {encrypted}")
decrypted = decrypt_message(encrypted, key)
print(f"أصلي: {decrypted}")اختبر فهمك