Skydata001 commited on
Commit
fc7782e
·
verified ·
1 Parent(s): 5ac5187

Create app.py

Browse files
Files changed (1) hide show
  1. Password_AI/app.py +87 -0
Password_AI/app.py ADDED
@@ -0,0 +1,87 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # app.py
2
+
3
+ # 1. استيراد المكتبات الأساسية
4
+ from flask import Flask, render_template, request, jsonify # Flask لإدارة الويب
5
+ from password_data import COMMON_PASSWORDS # ملف البيانات المحلي (محاكاة بيانات التسريب)
6
+ import re # مكتبة التعبيرات النمطية لفحص أنواع الأحرف
7
+
8
+ # تهيئة تطبيق Flask
9
+ app = Flask(__name__)
10
+
11
+ # دالة (Function) لفحص القوة والتحقق من التسريب
12
+ def check_password_strength(password):
13
+ """تحليل قوة كلمة المرور وإرجاع الحالة والنصائح."""
14
+ score = 0
15
+ feedback = []
16
+
17
+ # ------------------
18
+ # أ. قواعد قوة كلمة المرور
19
+ # ------------------
20
+
21
+ # القاعدة 1: الطول (الأولوية القصوى)
22
+ if len(password) >= 12:
23
+ score += 3
24
+ feedback.append("✔️ طول ممتاز (12 حرفًا أو أكثر).")
25
+ elif len(password) >= 8:
26
+ score += 2
27
+ feedback.append("⭐ طول جيد (8-11 حرفًا).")
28
+ else:
29
+ feedback.append("❌ كلمة المرور قصيرة جداً (يجب أن تكون 8 أحرف على الأقل).")
30
+
31
+ # القاعدة 2: تنوع الأحرف (نقاط إضافية لكل نوع)
32
+ if re.search(r"[a-z]", password): score += 1 # أحرف إنجليزية صغيرة
33
+ if re.search(r"[A-Z]", password): score += 1 # أحرف إنجليزية كبيرة
34
+ if re.search(r"\d", password): score += 1 # أرقام
35
+
36
+ # القاعدة 3: الرموز والأحرف العربية
37
+ # هذا التعبير يبحث عن أي شيء ليس حرفاً إنجليزياً أو رقم، بما في ذلك الرموز والأحرف العربية.
38
+ if re.search(r"[^a-zA-Z0-9\s]", password):
39
+ score += 1
40
+
41
+ # ------------------
42
+ # ب. التحقق من التسريب (محاكاة Hugging Face)
43
+ # ------------------
44
+
45
+ # تحويل الكل إلى أحرف صغيرة للمقارنة غير الحساسة لحالة الأحرف
46
+ is_leaked = password.lower() in [p.lower() for p in COMMON_PASSWORDS]
47
+
48
+ if is_leaked:
49
+ # إذا كانت مسربة، يتم إهمال القوة وتصنيفها كـ "ضعيفة جداً"
50
+ status = "ضعيفة جداً"
51
+ color = "red"
52
+ feedback.append("🚨 تم العثور عليها ضمن كلمات المرور المسربة أو الشائعة جداً.")
53
+ elif score >= 5:
54
+ status = "آمنة"
55
+ color = "green"
56
+ elif score >= 3:
57
+ status = "جيدة"
58
+ color = "orange"
59
+ else:
60
+ status = "ضعيفة"
61
+ color = "red"
62
+
63
+ return status, color, feedback
64
+
65
+ # مسار الصفحة الرئيسية: عرض الواجهة
66
+ @app.route('/')
67
+ def index():
68
+ return render_template('index.html')
69
+
70
+ # مسار الفحص: استقبال كلمة المرور وإرسال النتيجة
71
+ @app.route('/check', methods=['POST'])
72
+ def check():
73
+ data = request.get_json()
74
+ password = data.get('password', '')
75
+
76
+ status, color, feedback = check_password_strength(password)
77
+
78
+ # إرجاع النتائج بتنسيق JSON
79
+ return jsonify({
80
+ 'status': status,
81
+ 'color': color,
82
+ 'feedback': feedback
83
+ })
84
+
85
+ if __name__ == '__main__':
86
+ # تشغيل التطبيق في وضع التطوير
87
+ app.run(debug=True)