الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

تغيير كلمة المرور

مغلق
بدأه abboodd dude في 23 يونيو 2007 · 11 رد · 3,673 مشاهدة · في لغة Ms Visual Basic 6 وما قبلها من إصدارات
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

مقدمة :

يتحدث هذا الموضوع عن كيفية إتاحة تغيير كلمة المرور للمستخدم مثل الجهاز المحمول لتضع فيه كلمة سر أولاً عليك كتابة كلمة السر القديمة ثم كتابة الجديدة ثم تأكيدها وهذا ما سنتدرب عليه في المثال ، قد تظن هذا ممكناً باستعمال المتغيرات العامة ولكن بعد أن أنشأت مشروعاً وجعلت فيه إمكانية لتغيير كلمة السر ستفاجأ عند إنهاء البرنامج وإعادة إقلاعه أن كلمة السر قد عادت إلى سابق عهدها ، السبب في ذلك هو أن المتغير (والذي يمثل قيمة مربع النص مثلاً) ليس متغيراً دائماً حيث أن أطول مدى للمتغيرات في فيجوال بيسيك يدوم إلى أن تنهي البرنامج لذلك سيعلمك هذا الدرس كيف تحفظ المتغيرات حتى بعد إنهاء البرنامج وحتى بعد إطفاء الكمبيوتر . بالطبع هذا الدرس للمبتدئين ولكن أرجو من الأعضاء المتقدمين في مجال البرمجة الإضافة على هذه المعلومات كما أن هذا البرنامج ليس برنامج حماية ويمكن فكه وأنت مغمض العينين . ويعتمد هذا الدرس على التعامل مع الملفات لذلك إذا لم تكن تجيد التعامل مع الملفات فراجع درس (معالجة الملفات) للأخت بنت اليمن المحترمة

الدرس :

<H1 dir=rtl style="MARGIN: 24pt 0cm 0pt">أولاً أنشئ ملف text يدوياً وسمه abd (اتباعاً للمثال المرفق) ثم افتحه واكتب فيه 3314788 ثم أنشئ مشروعاً جديداً واحفظه على نفس المسار الموجود فيه ملف ال. text والآن في الفورم الأول أنشئ زر أوامر سمه cmdok وضع عنواناً له هو ok وأنشئ تيكست بوكس وامح محتواه ، الآن في حدث تحميل الفورم اكتب الكود التالي :</H1><H1 dir=rtl style="MARGIN: 24pt 0cm 0pt">Private sub form1_load ()</H1><H1 dir=rtl style="MARGIN: 24pt 0cm 0pt">Text1.passwordchar=*</H1><H1 dir=rtl style="MARGIN: 24pt 0cm 0pt">End sub</H1><H1 dir=rtl style="MARGIN: 24pt 0cm 0pt">والآن في حدث الضغط على cmdok اكتب</H1><H1 dir=rtl style="MARGIN: 24pt 0cm 0pt">Private sub cmdok_click ()</H1><H1 dir=rtl style="MARGIN: 24pt 0cm 0pt">Open app.path & "\abd.txt" for input as #1</H1><H1 dir=rtl style="MARGIN: 24pt 0cm 0pt">Line input #1 , a</H1><H1 dir=rtl style="MARGIN: 24pt 0cm 0pt">If text1.text=a then</H1><H1 dir=rtl style="MARGIN: 24pt 0cm 0pt">Msgbox "congratulations",vbokonly,"mypassword"</H1><H1 dir=rtl style="MARGIN: 24pt 0cm 0pt">Else</H1><H1 dir=rtl style="MARGIN: 24pt 0cm 0pt">Msgbox "enter the correct password please",vbokonly,"mypassword"</H1><H1 dir=rtl style="MARGIN: 24pt 0cm 0pt">End if</H1><H1 dir=rtl style="MARGIN: 24pt 0cm 0pt">Close #1</H1>Text1.text=""

Text1.setfocus

<H1 dir=rtl style="MARGIN: 24pt 0cm 0pt">End sub</H1><H1 dir=rtl style="MARGIN: 24pt 0cm 0pt"> حسناً الآن وقت شرح الكود :</H1><H1 dir=rtl style="MARGIN: 24pt 0cm 0pt">في حدث تحميل الفورم وضعنا الكود</H1><H1 dir=rtl style="MARGIN: 24pt 0cm 0pt">Text1.passwordchar=*</H1><H1 dir=rtl style="MARGIN: 24pt 0cm 0pt">هذا لترميز كلمة السر لتظهر على شكل نجوم ، أما بالنسبة لحدث الضغط على الزر فالأمر الأول </H1><H1 dir=rtl style="MARGIN: 24pt 0cm 0pt">Open app.path & "\abd.txt" for input as #1</H1><H1 dir=rtl style="MARGIN: 24pt 0cm 0pt">يقوم هذا الأمر بفتح الملف abd.txt الموجود في نفس مسار البرنامج (app.path) للقراءة فقط for input ونعطيه الرقم #1 </H1><H1 dir=rtl style="MARGIN: 24pt 0cm 0pt">وأما الأمر </H1><H1 dir=rtl style="MARGIN: 24pt 0cm 0pt">Line input #1 , a</H1><H1 dir=rtl style="MARGIN: 24pt 0cm 0pt">فيقوم بقراءة السطر الذي يحوي الرقم السري ويضع قيمته في المتغير a ، وبعد ذلك الكود</H1><H1 dir=rtl style="MARGIN: 24pt 0cm 0pt">If text1.text=a then</H1><H1 dir=rtl style="MARGIN: 24pt 0cm 0pt">Msgbox "congratulations",vbokonly,"mypassword"</H1><H1 dir=rtl style="MARGIN: 24pt 0cm 0pt">Else</H1><H1 dir=rtl style="MARGIN: 24pt 0cm 0pt">Msgbox "wrong password",vbokonly,"mypassword"</H1><H1 dir=rtl style="MARGIN: 24pt 0cm 0pt">End if</H1><H1 dir=rtl style="MARGIN: 24pt 0cm 0pt">هذا يجعل البرنامج يتحقق من قيمة مربع النص فإن كانت مساوية لقيمة المتغير a أي لكلمة السر المحفوظة في ملف التيكست فإنه يعطيك رسالة تهنئة وإن كانت لا تساويها فإنه يظهر رسالة يخبرك فيها بأن كلمة السر خطأ والأمر

</H1>close #1

لإغلاق الملف والأمر

Text1.text=""

Text1.setfocus

يقوم بإفراغ مربع النص وتوجيه التركيز إليه ، الآن أنشئ زر أوامر آخر سمه cmdchange وضع عنوانه change password وأنشئ فورم جديدة واكتب في حدث الضغط على هذا الزر

Private sub cmdchange_click()

Form2.show

End sub

الآن في الفورم الثاني أنشئ أداة عنوان وضع فيها enter the old password please واعمل زر أوامر وسمه ok وضع فيه نفس كود الزر السابق (cmdok) مع تغيير بسيط

If text1.text=a then

Form3.show

Else…….

وأنشئ زر back وطبعاً تيكست بوكس ثم أنشئ فورم جديد هو form3 ضع فيه زر Back وتيكست بوكس وأداة عنوان تقول للمستخدم أن يضع كلمة السر الجديدة وزر ok اكتب تعليماته كما يلي

Private sub cmdok_click()

If text1.text="" then

Msgbox "write a password",vbokonly,"my password"

else

Me.hide

Form4.show

End if

End sub

الآن على المستخدم إدخال كلمة السر الجديدة في التيكست بوكس ثم يؤكدها في الفورم التالي الذي هو form4 الذي ستضع فيه أداة عنوان تقول للمستخدم أن يؤكد كلمة السر وزر back وزر ok نكتب فيه

Private sub cmdok_click()

B=text1.text

If b= form3.text1.text then

Open app.path & "\abd.txt" for output as #1

Print #1,b

Msgbox "the password was changed",vbokonly,"my password"

Unload me

Unload form3

Form1.show

Close #1

Else

Msgbox "the new password and the confirm of it are different",vbokonly,"my password"

Text1.text=""

Text1.setfocus

End if

في هذا الكود نضع قيمة التيكست بوكس في المتغير b ثم نقارنه مع التيكست بوكس في الفورم السابقة (لهذا أخفيناها ولم نزلها من الذاكرة) وبعد ذلك إذا تطابقا يقوم البرنامج بإعادة إنشاء الملف abd.txt ويطبع فيه قيمة المتغير b (التيكست بوكس) ثم يظهر رسالة تخبر المستخدم أن كلمة السر تغيرت وتنهي كل النوافذ وتعود إلى النافذة الرئيسية وأما إذا لم يتطابقا فإنه يعرض رسالة يخبرك فيها بأن كلمة السر وتأكيدها ليسا متطابقين ، وطبعاً لا تنسى دائماً ضبط خاصية passwordchar إلى نجمة أو شيئ ما يشبهها ، ويمكنك إضافة بعض الكماليات مثل التحقق إذا كانت كلمة السر الجديدة مساوية للقديمة وعندها لن يكون المستخدم بحاجة إلى تغيير كلمة السر

أرجو أن يعجبكم هذا الدرس وأكرر رجائي من الأعضاء طرح أفكار أخرى لطرق حفظ المتغيرات حتى بعد إنهاء تشغيل الكمبيوتر .

يوجد في المرفق الأول مثال على البرنامج الذي صنعناه وفي الثاني درس معالجة الملفات للأخت بنت اليمن

mypassword.rar

File_Processing.rar

#2

للاسف اخي ..

موضوع هام , ولكن التنسيق ضعيف

اعد التنسيق لوسمحت مع استخدام اداة تنسيق الاكواد

شكراً لك , وجزاك الله خيراً

واوعى تاخد كلامي على محمل الزعل , بل خده كنصيحة

اقتباس
If A is success in life, then A equals x plus y plus z. Work is x; y is play; and z is keeping your mouth shut

Albert Einstein

مدخل إلى برمجة وتصميم الألعاب : كيف أبدأ ؟

#3

أعتذر أيها الأخوة على هذا التنسيق الضعيف ، ولكن أنا كنت كاتبه على الوورد وما أحلاه ثم نسخته وما نغير فيه شي بعدين لما ضغطت إضافة موضوع صارت العجايب

مقدمة :

يتحدث هذا الموضوع عن كيفية إتاحة تغيير كلمة المرور للمستخدم مثل الهاتف المحمول لتضع فيه كلمة سر جديدة أولاً عليك كتابة كلمة السر القديمة ثم الجديدة ثم تأكيدها وهذا ما سنتدرب عليه في المثال ، قد تظن هذا ممكناً باستعمال المتغيرات العامة ولكن بعد أن أنشأت مشروعك وجعلت فيه إمكانية تغيير كلمة السر وغيرها المستخدم ستفاجأ بعد إنهاء البرنامج وإعادة إقلاعه أن كلمة السر قد عادت إلى سابق عهدها ، والسبب في ذلك هو أن المتغير الذي استخدمته ليس متغيراً دائماً حيث أن أطول مدى للمتغيرات في فيجوال بيسيك يدوم فقط إلى أن تنهي البرنامج لذلك سيعلمك هذا الدرس كيف تحفظ المتغيرات حتى بعد إنهاء البرنامج وحتى بعد إطفاء الكمبيوتر . بالطبع هذا درس للمبتدئين ولكن نرجو من الأعضاء المتقدمين في هذا الموضوع الإضافة على هذه المعلومات ليصبح درساً متكاملاً وطبعاً هذا ليس برنامج حماية ويمكن فكه وأنت مغمض العينين . كما أن هذا الدرس يعتمد على معالجة الملفات لذلك إذا لم تكن تجيد التعامل مع الملفات فراجع درس معالجة الملفات للأخت بنت اليمن .

الدرس :

أولاً أنشئ ملف text يدوياً وسمه abd اتباعاً للمثال المرفق ثم افتحه واكتب فيه 3314788 ثم أنشئ مشروعاً جديداً واحفظه على نفس المسار الموجود فيه ملف التيكست . والآن في الفورم الأول أنشئ زر أوامر سمه cmdok وأنشئ مربع نص وامح محتواه ، والآن في حدث الضغط على cmdok اكتب

open app.path & "\abd.txt" for input as #1

line input #1,a

if text1.text=a then

msgbox "congratulations" , vbokonly , "my password"

else

msgbox "enter the correct password please" , vbokonly , "my password"

end if

close #1

text1.text=""

text1.setfocus

حان الآن وقت شرح الكود أولاً الأمر

open app.path & "\abd.txt" for input as #1

يقوم بفتح الملف abd.txt الموجود في نفس مسار الملف للقراءة فقط ويعطيه الرقم 1

وأما الأمر

line input #1 , a

يقوم بقراءة سطر من الملف وهو السطر الذي يحوي كلمة السر وضع قيمة هذا السطر في المتغير a

والكود

if text1.text=a then

msgbox "congratulations" , vbokonly , "my password"

else

msgbox "wrong password" , vbokonly , "my password"

end if

يجعل البرنامج يتحقق من قيمة مربع النص فإذا كانت مساوية لقيمة المتغير a أي لكلمة السر المحفوظة في ملف التيكست فإنه يظهر رسالة تهنئة وإن كانت لا تساويها فإنه يظهر رسالة يخبرك فيها بأن كلمة السر خاطئة

والكود

close #1
text1.text=""
text1.setfocus

لإغلاق ملف التيكست ولإفراغ مربع النص وتحويل التركيز إليه

الآن أنشئ زر أوامر آخر سمه cmdchange وضع فيه أمراً للانتقال إلى الفورم التالي ، ثم في الفورم الثاني ضع أداة عنوان تطلب من المستخدم وضع كلمة السر القديمة وضع مربع نص وزر ok اكتب فيه مثل ما كتبت في زر ok السابق مع تغيير بسيط هو

if text1.text=a then

unload me

form3.show

else ....

والآن في الفورم الثالث ضع مبرع نص وأداة عنوان تطلب من المستخدم إدخال كلمة السر الجديدة وضع زر ok واكنب في حدث الضغط عليه

if text1.text="" then

msgbox "write a new password" , vbokonly , "my password"

else

me.hide

form4.show

end if

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

b=text1.text

if b=form3.text1.text then

open app.path & "\abd.txt" for output as #1

print #1 , b

msgbox "the password was changed " , vbokonly , "my password "

unload me

unload form3

form1.show

close #1

else

msgbox "the new password and the confirm of it are different" , vbokonly , "my password"

text1.text=""

text1.setfocus

end if

في هذا الكود نضع قيمة مربع النص في المتغير b ثم نقارنه مع مربع النص في الفورم السابقة ولذلك أخفيناها ولم نزلها من الذاكرة فإذا تطابقا يقوم البرنامج بإعادة إنشاء ملف التيكست ويضع فيه قيمة المتغير b وينهي كل النوافذ ويعود إلى النافذة الرئيسية وبالطبع لا ننسى إغلاق ملف التيكست بالأمر close #1 وأما إذا لم يتطابقا فعندها نظهر رسالة تخبر المستخدم أن كلمة السر الجديدة لا تتطابق مع تأكيدها ونفرغ مربع النص ونوجه التركيز إليه . وطبعاً يمكنك إضافة بعض الكماليات مثل ضبط خاصية passwordchar أو مثلاً التحقق إذا كانت كلمة السر الجديدة والقديمة متماثلتين وعندها لن يكون هناك فائدة من تغيير كلمة السر وغيرها من الكماليات والأشياء الجميلة .

وأكرر رجائي من الأعضاء طرح أفكار أخرى لحفظ متغيرات تدوم لبعد إنهاء تشغيل البرنامج .

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

mypassword.rar

File_Processing.rar

#4

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

انا شخصيا جربتها واشتغلت معايا تمام

لكن طبعا لا ننكر جمال البرنامج و فنيته العالية

جزاك الله كل خير اخي الفاضل علي البرنامج

#5

ممكن كده وممكن كده وممكن 100 طريقة بس المهم هو أنو لما تطفي الكمبيوتر ما تروح كلمة السر

#6

بسم الله

طريقة جميلة فعلا وانا كنت بستخدمها على طول في برامجي

لكن بدات اعمل نفس الطريقة لكن بدل ما احط القيم في ملفات احطها في الريجستري

بس طريقتك جميلة وجزاك الله خيرا

#7

اخي الفاضل abboodd dude

عجبني جدا توقيع حضرتك

"اثنان لا يتعلمان مستحي ومتكبر"

وبناء علي ذلك ممكن حضرتك تعلمنا طرق تانية غير الموجودة في المثال و غير قاعدة بيانات

وجزاك الله كل خير

#10

بسم الله

الاخوة الاعزاء اسمحولي اشارك بشرحي الضعيف في هذا الموضوع الشيق المفيد الذي بدأه أخانا abboodd dude جزاه الله عنا خير الجزاء

بالنسبة لوضع القيم في الريجستري ممكن في بعض الاحيان تبقى احسن من الملفات او اكثر امانا

لان المستخدم ممكن يوصل للملف اللي فيه الباسورد بطريقة او بأخرى وبالذات لوكان في نفس فولدر البرنامج

ممكن لو توقع ان الباسورد موجود في ملف مع البرنامج ميسبش ملف الا ويفتحه (في ناس رخمه كده :D )

وبمناسبة وضع الباسورد في ملفات اعتقد والله اعلم ان وضع الملف في System32 مثلا يبقى اكثر امانا

اما لوعايز تبعد عن كل الشبهات دي ( بالنسبة للمستخدم العادي طبعا لان بتوع التجميع بيفكو اي باسورد ) يبقى تشتغل على الريجستري ويبقى احتمالات كشف الباسورد اصعب شوية

ازاي بقى نتعامل مع الريجستري في الباسورد

اول حاجة انا حاطط في المرفقات مرفق به مثال كامل على الموضوع ده

طرق الكتابة في الريجستري ليها طريقتين

اول حاجة باستخدام دوال API ودي طويلة شوية ومش هنستخدمها في موضوعنا ده

والطريقة التانية هي استخدام دالة Savesetting للتسجيل ودالة Getsetting لارجاع القيمة

والدوال دي بتستخدم كالاتي

Savesetting(AppName,Section,Key,Value)

بشرح مبسط

انت بتقوله سجل القيمة الفلانية اللي هي Value جوه المفتاح الفلاني اللي هو Key جو السكشن الفلاني اللي هو Section وكل ده جوه اسم البرنامج بتاعك

يعني هيبقى زي فولدر جو فولدر جو فولدر ومسار كامل لكن كل ده داخل الريجستري

اما دالة الحصول على القيمة فهي

A=Getsetting(AppName,Section,Key)

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

لان القيمة اللي انت سجلتها بدالة التسجيل هتتحط تلقائي في المتغير A

ارجو اني اكون وضحت الجزء ده

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

انت عرفت طريقة الكتابة في الريجستري يبقى هتستبدل الكتابة في الملف بالكتابة في الريجستري

يعني هستبدل الكود بتاع

Open App.Path & "\aa" for input as #1

بالكود

A=Getsetting(AppName,Section,Key)

ونختبر قيمة التكست بتاع الباسوورد بقيمة المتغير

يعني هيبقى

If text1.text=A then 'Password right' Else : 'Password wrong'

وكده تبقى عملت برنامج باسسورد باساتخدام الريجستري

طريقة سهلة ومش معقدة وان شاء الله المرفقات تبقى مفيدة

واي استفسار انا ان شاء الله موجود

والله اعلم

Password_in_reg.rar

#11

you're the man :)

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

#12

بما أنه ما في حدا عم يتفاعل حأشرح أنا الطريقة

أولاً أنشئ ملف تيكست سمه abd.txt واجعله في نفس مسار المشروع واكتب فيه 0

اكتب في حدث تحميل الفورم الرئيسي

Static a

Open App.Path & "\abd.txt" For Input As #1

Line Input #1, a

Close #1

If a = 30 Then

MsgBox "time's up", vbOKOnly, "only 30 times"

End

Else

Open App.Path & "\abd.txt" For Output As #2

a = a + 1

Print #2, a

Close #2

End If

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

ويمكن عمل هذا الملف في الريجيستري بطريقة الأخ أمير

المثال موجود في المرفق

only_30_times.rar

هذا الموضوع مغلق.

مواضيع مشابهة