الفرق بين المراجعتين لصفحة: «Algorithms/strong password suggester»
لا ملخص تعديل |
جميل-بيلوني (نقاش | مساهمات) طلا ملخص تعديل |
||
(مراجعتان متوسطتان بواسطة مستخدمين اثنين آخرين غير معروضتين) | |||
سطر 26: | سطر 26: | ||
Input :rakesh@1995kumar | Input :rakesh@1995kumar | ||
Output : Your Password is Strong</source> | Output : Your Password is Strong</source> | ||
== خطوات الخوارزمية == | == خطوات الخوارزمية == | ||
سطر 34: | سطر 32: | ||
== تنفيذ الخوارزمية == | == تنفيذ الخوارزمية == | ||
تعرض الأمثلة التالية طريقة تنفيذ الخوارزمية في عدد من لغات البرمجة: | تعرض الأمثلة التالية طريقة تنفيذ الخوارزمية في عدد من [https://academy.hsoub.com/programming/general/%D9%84%D8%BA%D8%A7%D8%AA-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9/ لغات البرمجة]: | ||
* C++: | * C++: | ||
سطر 301: | سطر 299: | ||
[[تصنيف: الخوارزميات]] | [[تصنيف: الخوارزميات]] | ||
[[تصنيف: الخوارزميات العشوائية]] | [[تصنيف: الخوارزميات العشوائية]] | ||
{{#seo: | |||
description=شرح لكيفية كتابة خوارزمية يمكن تنفيذها بأي لغة من لغات البرمجة تقترح كلمات مرور قوية. | |||
}} |
المراجعة الحالية بتاريخ 10:15، 22 سبتمبر 2022
تتحقق هذه الخوارزمية من قوة كلمة المرور التي يدخلها المستخدم، وتقترح عليه عددًا منها إن لم تكن كلمة المرور التي أدخلها قوية.
تعدّ كلمة المرور قوية إذا حققت ما يلي:
- أن تتكوّن من 8 حروف.
- أن تحتوي على حرف واحد على الأقل.
- أن تحتوي على رقم واحد على الأقل.
- أن تحتوي على حرف واحد كبير وحرف واحد صغير على الأقل.
مثال:
Input : keshav123
Output : Suggested Password
k(eshav12G3
keshav1@A23
kesh!Aav123
ke(shav12V3
keGshav1$23
kesXhav@123
keAshav12$3
kesKhav@123
kes$hav12N3
$kesRhav123
Input :rakesh@1995kumar
Output : Your Password is Strong
خطوات الخوارزمية
تتحقّق الخوارزمية من موافقة كلمة المرور المدخلة للمعايير السابقة، فإن كانت كذلك تكون كلمة مرور قوية، وتتحقق الخوارزمية كذلك من الحروف الغائبة في كلمة المرور، وتعيد للمستخدم كلمة مرور عشوائية.
تنفيذ الخوارزمية
تعرض الأمثلة التالية طريقة تنفيذ الخوارزمية في عدد من لغات البرمجة:
- C++:
#include <bits/stdc++.h>
using namespace std;
// إضافة المزيد من الحروف لاقتراح كلمة مرور قوية
string add_more_char(string str, int need)
{
int pos = 0;
// حروف الهجاء
string low_case = "abcdefghijklmnopqrstuvwxyz";
for (int i = 0; i < need; i++) {
pos = rand() % str.length();
str.insert(pos, 1, low_case[rand() % 26]);
}
return str;
}
// إنشاء سلسلة نصية قوية
string suggester(int l, int u, int d, int s, string str)
{
// جميع الأرقام
string num = "0123456789";
// جميع الحروف الكبيرة والصغيرة والخاصة
string low_case = "abcdefghijklmnopqrstuvwxyz";
string up_case = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
string spl_char = "@#$_()!";
// الموقع الذي يوضع فيه الحرف
int pos = 0;
// تضاف حروف صغيرة إلى السلسلة النصية إن لم تكن موجودة فيها
if (l == 0) {
// توليد عدد صحيح عشوائي أقل من طول السلسلة النصية
pos = rand() % str.length();
// توليد عدد صحيح عشوائية أقل من 26 لفهرسة الحروف الأبجدية من أولها إلى آخرها
str.insert(pos, 1, low_case[rand() % 26]);
}
// تضاف حروف كبيرة إلى السلسلة النصية إن لم تكن موجودة فيها
if (u == 0) {
pos = rand() % str.length();
str.insert(pos, 1, up_case[rand() % 26]);
}
// تضاف الأعداد إلى السلسلة النصية إن لم تكن موجودة فيها
if (d == 0) {
pos = rand() % str.length();
str.insert(pos, 1, num[rand() % 10]);
}
// تضاف الأحرف الخاصة إلى السلسلة النصية إن لم تكن موجودة فيها
if (s == 0) {
pos = rand() % str.length();
str.insert(pos, 1, spl_char[rand() % 7]);
}
return str;
}
/* تستخدم هذه الدالة للتحقق من قوة كلمة المرور المدخلة من قبل المستخدم
وإن لم تكن كذلك تقترح الدالة بعض كلمات المرور القوية */
void generate_password(int n, string p)
{
// رايات تشير إلى عدد الحروف الصغيرة والكبيرة والخاصة والحروف التي تحتاجها الدالة لإكمال كلمة المرور
int l = 0, u = 0, d = 0, s = 0, need = 0;
// كلمات المرور المقترحة
string suggest;
for (int i = 0; i < n; i++) {
// كلمات المرور المقترحة
if (p[i] >= 97 && p[i] <= 122)
l = 1;
else if (p[i] >= 65 && p[i] <= 90)
u = 1;
else if (p[i] >= 48 && p[i] <= 57)
d = 1;
else
s = 1;
}
// التحقق من أن كلمة المرور المدخلة قوية وذلك بالتحقق من أن جميع الرايات فعالة
if ((l + u + d + s) == 4) {
cout << "Your Password is Strong" << endl;
return;
}
else
cout << "Suggested passowrd " << endl;
/*اقتراح عشر كلمات مرور */
for (int i = 0; i < 10; i++) {
suggest = suggester(l, u, d, s, p);
need = 8 - suggest.length();
if (need > 0)
suggest = add_more_char(suggest, need);
cout << suggest << endl;
}
}
// اختبار الدوال السابقة
int main()
{
string input_string = "geek@2018";
srand(time(NULL));
generate_password(input_string.length(), input_string);
return 0;
}
- جافا:
import java.io.*;
import java.util.*;
import java.util.Random;
public class GFG {
// إضافة المزيد من الحروف لاقتراح كلمة مرور قوية
static StringBuilder add_more_char(
StringBuilder str, int need)
{
int pos = 0;
Random randm = new Random();
// حروف الهجاء
String low_case = "abcdefghijklmnopqrstuvwxyz";
for (int i = 0; i < need; i++) {
pos = randm.nextInt(1000) % str.length();
str.setCharAt(pos,low_case.charAt(
randm.nextInt(1000) % 26));
}
return str;
}
// إنشاء سلسلة نصية قوية
static StringBuilder suggester(int l, int u, int d,
int s, StringBuilder str)
{
Random randm = new Random();
// جميع الأرقام
String num = "0123456789";
// جميع الحروف الكبيرة والصغيرة والخاصة
String low_case = "abcdefghijklmnopqrstuvwxyz";
String up_case = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
String spl_char = "@#$_()!";
// الموقع الذي يوضع فيه الحرف
int pos = 0;
// تضاف حروف صغيرة إلى السلسلة النصية إن لم تكن موجودة فيها
// String, add it
if (l == 0) {
// توليد عدد صحيح عشوائي أقل من طول السلسلة النصية
pos = randm.nextInt(1000) % str.length();
// توليد عدد صحيح عشوائية أقل من 26 لفهرسة الحروف الأبجدية من أولها إلى آخرها
str.setCharAt(pos,low_case.charAt(randm.nextInt(1000)
% 26));
}
// تضاف حروف كبيرة إلى السلسلة النصية إن لم تكن موجودة فيها
if (u == 0) {
pos = randm.nextInt(1000) % str.length();
str.setCharAt(pos,low_case.charAt(randm.nextInt(1000)
% 26));
}
// تضاف الأعداد إلى السلسلة النصية إن لم تكن موجودة فيها
if (d == 0) {
pos = randm.nextInt(1000) % str.length();
str.setCharAt(pos,low_case.charAt(randm.nextInt(1000)
% 10));
}
// تضاف الأحرف الخاصة إلى السلسلة النصية إن لم تكن موجودة فيها
// String, add it
if (s == 0) {
pos = randm.nextInt(1000) % str.length();
str.setCharAt(pos,low_case.charAt(randm.nextInt(1000)
% 7));
}
return str;
}
/* تستخدم هذه الدالة للتحقق من قوة كلمة المرور المدخلة من قبل المستخدم
وإن لم تكن كذلك تقترح الدالة بعض كلمات المرور القوية */
static void generate_password(int n, StringBuilder p)
{
// رايات تشير إلى عدد الحروف الصغيرة والكبيرة والخاصة والحروف التي تحتاجها الدالة لإكمال كلمة المرور
int l = 0, u = 0, d = 0, s = 0, need = 0;
// كلمات المرور المقترحة
StringBuilder suggest;
for (int i = 0; i < n; i++) {
// كلمات المرور المقترحة
if (p.charAt(i) >= 97 && p.charAt(i) <= 122)
l = 1;
else if (p.charAt(i) >= 65 && p.charAt(i) <= 90)
u = 1;
else if (p.charAt(i) >= 48 && p.charAt(i) <= 57)
d = 1;
else
s = 1;
}
// التحقق من أن كلمة المرور المدخلة قوية وذلك بالتحقق من أن جميع الرايات فعالة
if ((l + u + d + s) == 4) {
System.out.println("Your Password is Strong");
return;
}
else
System.out.println("Suggested password ");
/*اقتراح عشر كلمات مرور */
for (int i = 0; i < 10; i++) {
suggest = suggester(l, u, d, s, p);
need = 8 - suggest.length();
if (need > 0)
suggest = add_more_char(suggest, need);
System.out.println(suggest);;
}
}
// اختبار التوابع السابقة
public static void main(String[] args)
{
StringBuilder input_String = new StringBuilder("geek@2018");
generate_password(input_String.length(), input_String);
}
}
تعطي الشيفرات السابقة المعطيات التالية:
Suggested password
geek@201K8
geek@201S8
gOeek@2018
geek@201N8
geek@2P018
geek@D2018
geUek@2018
geek@2Q018
geek@2F018
geekZ@2018
مصادر
- صفحة Strong Password Suggester Program في توثيق الخوارزميات في موقع GeeksforGeeks.