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

*حماية* : تشفير كلمات السر

مغلق
بدأه ابوهاني في 8 نوفمبر 2001 · 36 رد · 5,993 مشاهدة · في قسم الأرشيف و المواضيع المميزه
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

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

اليك هذا الكود لتشفير كلمة السر

Public Function WriteSr(Sr)
On Error GoTo MyErr
Dim MyLength As Integer
Dim I  As Integer
Dim MySr

If IsNull(Sr) Then
MsgBox "لايمكن ان تكون كلمة السر فارغة"
Exit Function
End If

Sr = Trim(Sr)
MyLength = Len(Sr)

If MyLength = 0 Then
MsgBox "لايمكن ان تكون كلمة السر فارغة"
Exit Function
End If

I = 1
Do Until I - 1 = MyLength
MySr = MySr & Chr((Asc(Mid(Sr, I, 1))) + 18)
I = I + 1
Loop


WriteSr = MySr

Exit Function
MyErr:
MsgBox "لم تتم العملية  حصل الخطأ التالي:" & Chr(10) & Chr(13) & "رقم الخطأ : " & Err.Number & Chr(10) & Chr(13) & Err.Description
End Function

يمكنك اختبار هذه الدالة كالتالي :

انسخ الدالة والصقها في وحدة نمطية جديدة Moduels

انشي نموذج جديد وضع فيه Text1 و Text2 وزر Command1

اكتب الشفرة التالية عند حدث OnClick للـ Command1

Text2 = WriteSr(Text1)

اكتب كلمة السر الخاصة بك في Text1 واضغط على Command1

وشاهد كلمة السر الان ..... حروف مشفرة .

انا جربت التالي

كتبت ابوهاني فظهرت الكلمة بعد التشفير كالتالي : " ظعّ÷ظِے "

اذا شفرت كلمة السر وظهرت لك حروف غريبة !

يجب الان ان نسترجع كلمة السر , كيف ؟!

سوف اترك الاجابة للاخوان حتى ارى ان هناك من يهتم بالموضوع ... ام ان مواضيعي لا تهم احد

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

تحياتي

#2

الأخ أبوهاني

طريقة ممتازة جداً الله يعطيك العافية . :D

وقد عدلت في الكود حتى لانحتاج إلى تخزين القيم في مربع نص على النموذج وإنما مباشرة في الجدول .

Dim MyLength As Integer
Dim I As Integer
Dim MySr, SR
SR = InputBox("أدخل كلمة السر :", "كلمة سر للنموذج")
If Len(SR & "") = 0 Then
MsgBox "لايمكن ان تكون كلمة السر فارغة"
Exit Sub
End If
SR = Trim(SR)
MyLength = Len(SR)

I = 1
Do Until I - 1 = MyLength
MySr = MySr & Chr((Asc(Mid(SR, I, 1))) + 18)
I = I + 1
Loop
If DCount("[كلمة السر]", "جدول1") = 0 Then
DoCmd.RunSQL ("INSERT INTO جدول1 ( [كلمة السر] ) SELECT" & "'" & MySr & "'" & " AS [كلمة السر];")
Else
DoCmd.RunSQL ("UPDATE جدول1 SET جدول1.[كلمة السر] =" & "'" & MySr & "'")
End If

اسم الجدول في الكود جدول1 والحقل كلمة السر ونوعه نص .

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

لا تتأخر:rolleyes:

ولك تحياتي

#3

الأخ ابو حمود

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

اسال الله العلي القدير ان يبلغكم شهر رمضان الكريم وان يتقبل منا ومنكم صالح الأعمال وان يوفقكم وايانا لصيامه وقيامه وفعل الخيرات

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

#4

الأخ أبو هاني :

شكرا على فوائدك مرة أخرى ولكن كيف استفيد من هذا النموذج فى القاعدة بعد الانتهاء .

على فكرة مثال الأخ أبو هاني على هذه الوصلة - أكسيس 2000

http://mypage.ayna.com/ashrafk/sr.mdb

أشرف خليل

#5

الأخوة الأعزاء :

يا سلام لما المنتدي يكون فيه نوابغ

مثال الأخ أبو حمود على الوصلة التالية - أكسيس 2000

http://mypage.ayna.com/ashrafk/sr1.mdb

أشرف خليل

#6

الأخ طلال

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

أسأل الله أن يغفر لك ويتقبل منك وأن يغفر لوالديك وأن يجعله شهر عز ونصر لهذه الأمة التي تكالب عليها أعداؤها من كل مكان وأن يقر أعيينا بنصر الأفغان وبذل الشرك وأهله والمتحالفين معه .

ولك تحياتي

#7

الاخوة الكرام

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

يبدو ان الموضوع لا يهم احد الا نحن الثلاث ، والمشاركات قليلة رغم كثر الزائرين ....

:(

الاخ ابو حمود

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

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

والان هذه دالة استرجاع كلمة السر

Public Function GetSr(Sr)
On Err GoTo MyErr
Dim MyLength As Integer
Dim I  As Integer
Dim MySr
Dim MyA


If IsNull(Sr) Then
GetSr = ""
Exit Function
End If

Sr = Trim(Sr)
MyLength = Len(Sr)
I = 1
Do Until I - 1 = MyLength
MySr = MySr & Chr((Asc(Mid(Sr, I, 1))) - 18)
I = I + 1
Loop
GetSr = MySr
Exit Function
MyErr:
MsgBox "لم تتم العملية  حصل الخطأ التالي:" & Chr(10) & Chr(13) & "رقم الخطأ : " & Err.Number & Chr(10) & Chr(13) & Err.Description
End Function

والان لضيق الوقت فاني اترك للاخوة ذوي الخبرة كتابة كود تخزين واسترجاع كلمة السر في مسجل ويندوز أو (Registry )

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

تحياتي

#8

الأخ ابو هاني

لك مني الشكر على تكرمك ببقية الكود وفقك الله .

ثم إن الناس أذواق في التخزين فمنهم من يرغب في الجدول ومنهم من يرغب في سجل وندوز وفيهم من يرغب في ملف خارجي ... ويقولون لولا اختلاف الأذواق لبارت السلع :)

وأما بخصوص تجزئة الدالة فليس فيها مايستحق التجزئة فقد أزلت أسطر وأضفت أسطر أخرى بدلا منها وهي في رأيي الشخصي مفهومة وسهلة التعديل ولا تحتاج تجزئة .

ولن أغضب إن شاء الله من النقد الموجه للعمل وليس للشخص فالمجال مجال آراء وكلنا بشر نصيب ونخطئ .

ولك تحياتي

#9

الأخ أبو هاني

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

فهل ملاحظتى سليمة أم ماذا ؟

أشرف خليل

#10

اشكرك اخي ابو حمود على تفهمك ...

واتمنى من الله العلي القدير ان لا اكون قد مسست شخصكم الكريم بشي ... واتمنى لك ولبقية الشباب التوفيق.

#11

الأخ أشرف

لقد جربت الكود استرجاع الكلمة فوجدته يعمل مع الحروف العربية والإنجليزية والأرقام ، والأرقام مع الحروف يعني ميه ميه ، جزى الله أبو هاني خير .

وهذا الكود لإسترجاع الكلمة من الجدول (تكمله للسابق) :

Dim MyLength As Integer
Dim I As Integer
Dim MySr

Sr = DLookup("[كلمة السر]", "جدول1")
If IsNull(Sr) Then
MsgBox "لا يوجد كلمة سر مخزنة في الجدول"
Exit Sub
End If

Sr = Trim(Sr)
MyLength = Len(Sr)
I = 1
Do Until I - 1 = MyLength
MySr = MySr & Chr((Asc(Mid(Sr, I, 1))) - 18)
I = I + 1
Loop
MsgBox MySr

وهذا كود لحفظه في سجل وندوز كتبته نيابة عن أخي أبو هاني :

Dim MyLength As Integer
Dim I As Integer
Dim MySr, Sr
Dim اسم_القاعدة As String

Sr = InputBox("أدخل كلمة السر :", "كلمة سر للنموذج")
If Len(Sr & "") = 0 Then
MsgBox "لايمكن ان تكون كلمة السر فارغة"
Exit Sub
End If
Sr = Trim(Sr)
MyLength = Len(Sr)

I = 1
Do Until I - 1 = MyLength
MySr = MySr & Chr((Asc(Mid(Sr, I, 1))) + 18)
I = I + 1
Loop
اسم_القاعدة = Left(Right(CurrentDb.Name, InStr(StrReverse(CurrentDb.Name), "") - 1), _
Len(Right(CurrentDb.Name, InStr(StrReverse(CurrentDb.Name), "") - 1)) - 4)
SaveSetting اسم_القاعدة, Me.Name, "PASSWORD", MySr

وهذا كود لإسترجاعه من سجل وندوز :

Dim MyLength As Integer
Dim I As Integer
Dim MySr
اسم_القاعدة = Left(Right(CurrentDb.Name, InStr(StrReverse(CurrentDb.Name), "") - 1), _
Len(Right(CurrentDb.Name, InStr(StrReverse(CurrentDb.Name), "") - 1)) - 4)
Sr = GetSetting(اسم_القاعدة, Me.Name, "PASSWORD")

If IsNull(Sr) Then
MsgBox "لا يوجد كلمة سر مخزنة في الجدول"
Exit Sub
End If

Sr = Trim(Sr)
MyLength = Len(Sr)
I = 1
Do Until I - 1 = MyLength
MySr = MySr & Chr((Asc(Mid(Sr, I, 1))) - 18)
I = I + 1
Loop
MsgBox MySr

وللجميع التحية

#12

أخي أبو حمود :

جربت الكود استرجاع من الجدول 10 ÷ 10

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

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

ولكم جميعا التحية

أشرف خليل

#13

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

ولك تحياتي

#14

هذا مثال سويته وتراه على قد الحال وفي تغيير لكلمة السر

mypage.ayna.com/fahadamkdb3.mdb

ولكم جزيل الشكر

#15

هذا مثال سويته وتراه على قد الحال وفي تغيير لكلمة السر

انقر هنا

ولكم جزيل الشكر

#16

اعزائي الكرام

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

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

ودمتم

من سار على الدرب وصل

#17

الأخ أبو حمود :

هذه القاعدة مصممة على أكسيس 97 . برجاء التعديل عليها كيفما شئت .

http://mypage.ayna.com/ashrafk/SR97.zip

ولي سؤال آخر فى تلك الوصلة

http://mypage.ayna.com/ashrafk/db97.mdb

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

توضيح آخر لنفس السؤال الثاني :

قمت بإدخال رقم 3 للعميل أشرف وعند محاولة إدخال الرقم 3 مرة أخرى تظهر الرسالة وتفيد أنه تم إدخال الرقم هذا من قبل للعميل : أشرف . ولو أنني عارف أن هذا السؤال ليس موضعه هنا .

ولك كل الشكر .

أشرف خليل

#18

اخي مفرج

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

اتفق معك ان كسر الشفرات " سواءاً لكلمات السر ، او المواقع ، او حتى البرامج التجارية ، او محطات البث الرقمي " ليس مستحيلا ، وكنها ليست بهذه البساطة التي تتصورها.

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

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

كلمة السر بعد التشفير = يï.èصٌ.ôصٍط.ضـûك.ûصٌëكعسصخ»×ع»ط¾¼آلإل»×رإہ

والان دالة التشفير بين يديك ، ودالة الاسترجاع ايضا بين يديك ... والمهمة كشف كلمة السر.... اتوقع انها سهلة بالنسبة لك ولكنها صعبة جدا لمن لايملك الدالتين السابقتين.

هل فترة شهر كامل كافية لك لكي تكشف كلمة السر :D

تحياتي

#19

الأخ اشرف

استبدل دالة Msgbox الموجودة في الكود لديك بالتالية :

        MsgBox "تم تسجيل رقم العميل هذا من قبــــل .... !!!!" & vbCrLf _
        & "واسمه : " & DLookup("الاسم", "جدول1", "[الرقم]=" & Forms![نموذج1]![الرقم]), vbExclamation, "رقم عميل مكرر "

الأخ مفرج

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

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

وللجميع التحية

#20

شكرا أبو حمود وعقبال الطلب الثاني وعلى مهلك ... لست متعجلا

أشرف خليل

#21

الأخ أشرف

نسيت ... ماهو الطلب الثاني ؟

ولك تحياتي

#22

أخى أبو حمود : الطلب الثاني كان على الرابط الأول وها هو مرة أخرى

http://mypage.ayna.com/ashrafk/SR97.zip

وهب عبارة عن قاعدة لكلمة سر على أكسيس 97 . شاهدها وقم بالتعديل فيها كيفما تشاء .

أشرف خليل

#23

اخي العزيز ابو هاني

انا لا ادخل في مجالات التحدي

ولكنني قلت في ردي ان المستخدم اذا استطاع تعديل كلمة السر فانه يستطيع معرفة فرق رقم الاسكي الذي غيرته وبذلك يسهل فكها وعليك تجربة ذلك ادخل كلمسر مثلا A وهي تمثل رقم الاسكي 65 ثم اضف عليها 18 ليكون الاسكي 83

ولك اسفي وعتذاري

من سار على الدرب وصل

#24

اخي الكريم مفرج حفظه الله

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

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

هذا وتقبل تحياتي.

ملاحظة :

كلمة السر كانت : كل عام وانت بخير يامفرج

#25

الأخ أبو حمود والأخ أبو هاني

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

http://mypage.ayna.com/ashrafk/SR97.zip

أشرف خليل

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

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