🔐 تشفير البيانات في مشروع Flask Notes App
بدلًا من حفظ الملاحظة مباشرة في قاعدة البيانات،
نستخدم نفس مكتبة التشفير cryptography داخل Flask.
📦 التثبيت
pip install cryptography
🧩 الكود داخل Flask (مثال مبسط)
from flask import Flask, render_template, request, redirect, url_for, flash
from flask_sqlalchemy import SQLAlchemy
from cryptography.fernet import Fernet
app = Flask(__name__)
app.secret_key = 'supersecret'
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///notes.db'
db = SQLAlchemy(app)
# تحميل مفتاح التشفير (أنشئه مسبقاً كما في الدرس السابق)
with open("secret.key", "rb") as key_file:
key = key_file.read()
fernet = Fernet(key)
class Note(db.Model):
id = db.Column(db.Integer, primary_key=True)
data = db.Column(db.Text, nullable=False)
@app.route("/", methods=["GET", "POST"])
def index():
if request.method == "POST":
note = request.form["note"]
encrypted = fernet.encrypt(note.encode()).decode()
new_note = Note(data=encrypted)
db.session.add(new_note)
db.session.commit()
flash("تم حفظ الملاحظة المشفّرة بنجاح!", "success")
return redirect(url_for("index"))
notes = Note.query.all()
decrypted_notes = []
for n in notes:
try:
decrypted_notes.append(fernet.decrypt(n.data.encode()).decode())
except:
decrypted_notes.append("[خطأ في فك التشفير]")
return render_template("index.html", notes=decrypted_notes)
if __name__ == "__main__":
app.run(debug=True)
📄 في ملف templates/index.html
<!DOCTYPE html>
<html lang="ar">
<head>
<meta charset="UTF-8">
<title>📓 ملاحظاتي المشفرة</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
</head>
<body class="bg-light p-4">
<div class="container">
<h1 class="text-center mb-4">🔐 ملاحظاتك المشفّرة</h1>
<form method="POST" class="mb-4">
<textarea name="note" class="form-control mb-2" placeholder="اكتب ملاحظتك..." required></textarea>
<button class="btn btn-primary w-100">حفظ الملاحظة</button>
</form>
{% for n in notes %}
<div class="alert alert-secondary">{{ n }}</div>
{% endfor %}
</div>
</body>
</html>
✅ النتيجة
- كل ملاحظة يتم تشفيرها قبل الحفظ في قاعدة البيانات.
- عند العرض، يقوم Flask بفك التشفير وعرض النص الأصلي.
- بهذه الطريقة، لو تم اختراق قاعدة البيانات فلن يعرف أحد محتوى الملاحظات.

