ORWA

تشفير كلمات المرور ,, شرح مع مثال

9 ردود في هذا الموضوع

تشفير كلمات المرور

نحتاج في الكثير من الأحيان ان نقوم بحفظ كلمة مرور في ملف أو على القرص أو في سجل ..... الخ ..

فإذا قمنا بحفظ هذه الكلمة كما هي فإننا نعرض كامل المنظومة للدخول غي المسموح , ونعرض نفسنا لخطر اختراق برنامجنا ...

لذلك وجدت انه من المفيد وضع مثال بسيط عن آلية تشفير كلمات المرور .

بحيث نشفر كلمة المرور قبل حفظها , وبالتالي الملف سيحوي كلمة المرور المعدلة , والتي يصعب العثور منها على الكلمة الأصلية إلا باتباع عكس خطوات خوارزمية التشفير

1- تشفير كلمة المرور ثم حفظ الكلمة المشفرة على القرص

2- إعادة فك تشفير الكلمة للتأكد من مطابقة الكلمة المدخلة من قبل المستخدم معها ..


مثال على تشفير بسيط

بما أننا نتعامل مع أحرف , فيصعب إجراء عمليات عى الأحرف لذلك سنقوم بتحويل الأحرف إلى أرقام عن طريق الدالة ord التي تعطينا الترتيب الرقمي بالآسكي المقابل للحرف المعطى

بعد ان أصبح لدينا رقم نسطيع ان نقوم بعملية على الرقم مثل جمع رقم معين أو القيام بعمليه ما علية ,,, أنا سأقوم بجمع ترتيب الحرف إلى قيمة الحرف مما يصعب إجراء عملية الفك , وهذا أفضل من جمع نفس العدد لكل مرة , حيث أول حرف نجمع له 1 , الثاني 2 , الثالث نجمع 3 , وهكذا ...

ملاحظة :

لإعادة تحويل الحرف إلى رقم نستخدم الدالى chr التي تعيد الحرف المقابل

أولا قراءة حرف واحد من السلسلة :

وذلك بالتعليمة

c:= s1[3];

حيث ستتم قراءة المحرف الثالث .

ولكي نقوم بجعل العملية أوتوماتيكية , لابأس بإضافة حلقة للمرور على جميع العناصر , بحيث يكون المتحول i هو رقم العنصر الحالي أي :

for i := 1 to length(s1) do
begin
c:= s1[i];
end;

حيث المتحول C سيحوي المحرف الحالي لوحدة ..

للحصول على رقم المحرف ووضعة في المتحول n نقوم بالداله :

n:= ord(c);

والآن نقوم بعملية رياضية على الرقم n , ومثلا كما قلنا نجمع ترتيب الرقم (i) إلى قيمة الرقم :

n:=n+i;

نضع الحرف في سلسلة أخرى أنتظارا لإنتهاء معالجة جميع عناصر السالسة المتبقية , مع تذكر ان chr تعيد الحرف من القيمة الرقمية

s2:=s2+chr(n);

كما تلاحظ معظم الأمور ستبقى نفسها في حال رغبت بالقيام بتشفيرك الخاص , والسطر الذي سيتغير هو سطر العملية الحسابية على n ... أي: n=n+i

---------------------------

للقيام بفك التشفير ..

نعيد نفس الخطوات , ولكن سطر العملية الحسابية على n يجب أن يقوم بعكس العمل (أي بما أننا كنا قد أضفنا ترتريب الحرف , فيجب إذا أن نقوم بطرح ترتيب الحرف لاسترجاع النص الأصلي)

أي نترك كل شيء ونبدل السطر n إلى التالي :

n:=n-i;

والآن نضع هذين الإجرائين في تابعين لسهولة إستخدامهما :

function TForm3.get_password(s1: string): string;
var
s2:string;
c:char;
i,n:integer;
begin
s2:='';
for i := 1 to length(s1) do
begin
c:= s1[i];
n:= ord(c);
n:=n+i;   //here you can change the coding
s2:=s2+chr(n);
end;
Result:=s2;

end;

function TForm3.set_password(s1: string): string;
var s2:string;
c:char;
i,n:integer;
begin
s2:='';
for i := 1 to length(s1) do
begin
c:= s1[i];
n:= ord(c);
n:=n-i;// عكس العملية السابقة
s2:=s2+chr(n);
end;
Result:=s2;
end;

لاستدعاء التابعين بمثال عملي :

قم بوضع 3 Edit على الفورم , واحد للكلمة الأصلية الثاني للكلمة المشفرة , الثالث لاسترجاع الكلمة الأصلية من الكلمة المشفرة ..

و2 Button , واحد للتشفير والثاني لفك التشفير ,,

وللإستخدام, لاحظ استدعاء الإجرائين السابقين ببساطه :

procedure TForm3.Button1Click(Sender: TObject);
begin
Edit2.Text:=set_password(Edit1.Text);
end;

procedure TForm3.Button2Click(Sender: TObject);
begin
Edit3.Text:=get_password(Edit2.Text);
end;

يفضل القيام بعمليات تزيد عدد حروف كلمة السر , مثلا يضع محرف عشوائي بين كل حرف , أو شيء من هذا ..

هذه صور للمثال . وتنفيذ المثال سهل على من يحب :

1_42c6df94bab97.gif

موقع عروة نت

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

شكراً اخ عروة على هذه المقالات الرائعة

و لكن اريد ان انوه الى انّ استخدام مصفوفة محارف سيؤدي بعض الاحيان الى ظهور #0

و الذي يعتبر نهاية المصفوفة مما يئدي الى اخطاء

فلذالك يجب استخدام مكتبة String فقط. كي تكون النتائج مضمونة

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

جميل جدا

هل هناك طرق اخرى للتشفير غير هذه الطريقة

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

الأخ العزيز / عروة و لا يهون الأخوان اعضاء المنتدى

السلام عليكم ورحمة الله وبركاته

كيف أجعل نص كلمة المرور التي كتبها المستخدم يظهر على شكل نجوم ******** في Edit1مثلاً .

ويظهر بشكل طبيعي في Edit2 .

هذا ولكم جزيل الشكر والتقدير

أخوكم / خالد

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

السلام عليكم قم اخي الكريم باستخدام MaskEdit الموجود في الصفحة Additional

ثم اضبط الخاصية PasswordChar على المحرف الذي تريده ان يظهر بدلا من الاحرف

واستخدم Edit لكي تظهر الاحرف مثل ماهي

ارجوا ان يكون هذا هو المطلوب

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

صحيح كلام الأخ waeldalol .

وحتى أنك لن تحتاج MaskEdit .. فقط إضبط الخاصة PasswordChar (الموجوده حتى بالedit العادي) إلى *

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

السلام عليكم فيه فكرة مستخدمة بمنتديات الvb وهي الmd5

هي ان تشفر كلمه المرور .. وتظعها بملف ،، وعند التحقق من ادخال المستخدم كلمه المرور تشفر الكلمه التي ادخلها وتقارنها بالكلمه التي شفرتها وحفظتها بالملف ... <_<

ان شاء الله وضحت الفكرة .. هذه افضل وسيله تشفير للكلمها السريه بإعتقادي

0

شارك هذا الرد


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

...

إذا كنت فهمت كلامك صح معناها انهم يستخدمون علم التشفير(cryptography) اذا كان الامر كذلك فلا فرق بين دلفي او بيسك

مجرد تنفيذ الخوارزمية وانتهي الامر

هذه افضل وسيله تشفير للكلمها السريه بإعتقادي

هذه ليست افضل طريقة بل هذا هو التشفير بعينه

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

الأخوان : waeldalol ,عروة

اشكركم على تجاوبكم السريع معي ,فجزاكم الله خير الجزاء وجعله في ميزان حسناتكم.

أخوكم : خالد

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
زوار
This topic is now closed to further replies.

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .