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

[ تمت الإجابة ]كيف يمكن تشفير/ترميز قاعدة بيانات خارجية بكل جداولها من قاعدة حالية

بدأه هانى عوض في 28 أغسطس 2009 · 17 رد · 4,883 مشاهدة · في قواعد بيانات Microsoft Access
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بعد التحية

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

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

قمت باستخدام وحدة نمطية للترميز (مقتبسة من الأخ الكبير رضا عقيل) كالتالى

Function incode(A As String, b As String) As String
	Dim R, i As Integer, s, u As String
1:
	u = ""
	s = ctrs(A, 3)
	If Len(s) Mod 2 = 1 Then s = s + Trim(Str(Int(8 * Rnd(-Timer))))
	i = 3 * Rnd(-Timer) + 1
	For R = 1 To i
		u = Chr(100 * Rnd(-Timer) + 155) + u
	Next
	u = Trim(Str(i)) + u
	u = u + s
	u = getcode(u, b)
	If decode(u, b) = A Then
		incode = u
	Else
		GoTo 1:
	End If
End Function
Function decode(A, b As String) As String
	On Error Resume Next
	Dim R, i As Integer, s, u As String
	u = getcode(A, b)
	i = Val(Mid(u, 1, 1)) + 1
	u = Mid(u, i + 1, Len(u) - i)
	If Len(u) Mod 3 <> 0 Then u = Mid(u, 1, Len(u) - 1)
	s = ""
	For R = 1 To Len(u) - 2 Step 3
		s = s + Chr(Val(Mid(u, R, 3)))
	Next
	decode = s
End Function
Function getcode(A, b As String) As String
	On Error Resume Next
	Dim L, R As Integer, c As Long, q As String
	c = 0
	For R = 1 To Len(b)
		c = c + Asc(Mid(b, R, 1)) * (10 ^ R)
	Next
	q = Str(c)
	c = 0
	For R = 1 To Len(q)
		c = c + Val(Mid(q, R, 1))
	Next
	q = ""
	For R = 1 To Len(A)
		L = 256 - Asc(Mid(A, R, 1)) - R - Len(A)
		If L + c > 255 Then
			q = q + Chr(L - c)
		Else
			q = q + Chr(L + c)
		End If
	Next
	getcode = q
End Function
Function ctrs(s As String, Y As Byte) As String
	Dim R, i As Integer, u, T As String
	u = ""
	For R = 1 To Len(s)
		T = Trim(Str(Asc(Mid(s, R, 1))))
		For i = 1 To Y - Len(T)
			T = "0" + T
		Next i
		u = u + T
	Next
	ctrs = u
End Function

وقمت باستخدام هذا الكود

	DoCmd.RunSQL "UPDATE tblItems SET tblItems.Itname = incode(tblItems.[Itname],tblItems.[Itname]);  ", -1

ولكن هذا الكود يقوم بتشفير كل محتويات الحقل المحدد فقط..

مرفق مثال للتوضيح

شكراً مقدماً على المساعدة

مع خالص تحياتى

EncodTables.rar

#2

مرفق مثال أخي الفاضل هاني

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

المثال منفذ بأيدي مشرفتنا العبقرية ومعلمتنا الغالية زهرة العبد الله جزاها الله خيراً

والله لم تتركي شيأ يا زهرة المنتدي الا ووفيتيه حقة تماماً

وفقك الله وسدد خطاكي اينما كنتي

Encrypt.rar

certifiedj.jpg

 

 

Image Hosted by ImageShack.us
#3

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

اقتباس
المثال منفذ بأيدي مشرفتنا العبقرية ومعلمتنا الغالية زهرة العبد الله جزاها الله خيراً

والله لم تتركي شيأ يا زهرة المنتدي الا ووفيتيه حقة تماماً

وفقك الله وسدد خطاكي اينما كنتي

ليس هناك كلام يقال .. إبداع من زهرة ... هذا هو العادى.

محمد ندا

... بقمة السعادة .. أعود بإذن الله لصحبتكم الرائعة قريباً ...

#4

شكراً جزيلاً أخى الكبير محمد

صراحة لم أتخيل الحل بهذه الطريقة أبداً....!!!!!

فعلاً إبداع برمجى وفكر عالى..

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

وحفظ أختنا الغالية زهرة ووفقها فى خطاها..

ملحوظة:

المثال المرفق MDE ... وصراحة رؤية الأكود تثير فضولى.. لذا أرجو إرفاق الملف MDB مفتوح المصدر حتى تكتمل الصورة..

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

تم تعديل هذه المشاركة بواسطة هانى عوض في 29 أغسطس 2009 في 11:48

#5

والله يا أخي الفاضل هاني

المثال المرفق من الاخت الغالية زهرة اصلا بنفس الامتداد الذي ارفقتة لك ولا اعرف انه المثال بامتداد MDE لذلك حاولت أن ابحث لك عن مثال آخر يكون مفتوح المصدر وللاسف لم أجد

مشاركة زهرة الاساسية

/index.ph...092;تشفير\

certifiedj.jpg

 

 

Image Hosted by ImageShack.us
#6

شكراً جزيلاً أخى الكريم محمد لتواصلك فى حل المشكلة

ما توصلت له حتى الآن

	Dim Ap As New Access.Application
	Dim Acpath As String
	Acpath = txtPath

	Ap.OpenCurrentDatabase Acpath
	DoCmd.SetWarnings False
	Ap.DoCmd.RunSQL "UPDATE Sales SET Sales.Client_name = incode(Sales.[Client_name],Sales.[Client_name]);  ", -1

الكود ده بيشفر حقل واحد داخل جدول قاعدة خارجية..

ربما أجد طريقة لتشفير الجدول بالكامل .. لتقريب المسافة أكثر..

دعواتكم.

#7

الأخ الفاضل هاني عوض...

مرفق مثال بسيط مفتوح المصدر بناءً على الملف الذي تفضلت به، يقوم بترميز بعض حقول الجدول المختار من قبل المستخدم، لكن هناك ملحوظتين صغيرتين:

1. الكود المرفق يشفر الحقول النصية فقط.

2. الدوال incode وdecode تأخذ معاملين: القيمة المراد تشفيرها، ومفتاح من المفروض أن يكون سرياً، ويستخدم في التشفير ثم في فك التشفير، ولا قيمة للتشفير بدون القدرة على إعادة فكه هنا. ولذلك لا تستطيع تمرير القيمة المراد تشفيرها مرة أخرى كمفتاح، لأنك لن تجدها عند فك التشفير (ستكون مشفرة!). وعلى هذا، فإن الكود الذي تفضلت بإرفاقه يتطلب إدخال أي رقم كمفتاح، وحفظه لاستخدامه فيما بعد في فك التشفير.

أرجو المعذرة عن أي خطأ، كما أرجو أن يكون هذا ذا نفع، والله أعلم.

EncodeDecodeTables.rar

#8

أخى أحمد مبارك

مرحباً ..

مثال جميل ومفتوح المصدر .. جزاك الله خيراً.

سوف أحـــــــــــــــــــــــــــــــــــــــاول أن أفهم منه شيئاً

تحياتى

محمد ندا

... بقمة السعادة .. أعود بإذن الله لصحبتكم الرائعة قريباً ...

#9

شكراً أخى الكريم أحمد مبارك على مجهودكم فى حل هذه المشكلة معى

فكرة المثال جميلة ولكن أظن أن بها بعض الأخطاء أثناء عملية التنفيذ...

ولكن الفكرة المطلوبة معى هدفها التالى:

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

2- وطريقة هذا التشفير من المحبذ لو أمكن مجرد تحديد اسم القاعدة الخارجية ومن ثم تشفير كافة البيانات دفعة واحدة...!!!!! :hmm:

وقد تم عمل أداه لتركيب هذه الحماية على القاعدة..

وشكراً جزيلاً لحسن المساعدة

#10

السلام عليكم

جهد طيب بارك الله فيك

#11

للرفع

#12

عوداً حميداً لاختنا ومعلمتنا زهرة

أختي الغالية زهرة

هل من الممكن ان تقومي بارفاق في مشاركتك اعلاه الملف المفتوح المصدر وليس ملف MDE حتي تعم الفائده علي الجميع

وكل عام وانتم بخير

عيد سعيد

certifiedj.jpg

 

 

Image Hosted by ImageShack.us
#13
محمد فؤاد تركي كتب:
عوداً حميداً لاختنا ومعلمتنا زهرة

أختي الغالية زهرة

هل من الممكن ان تقومي بارفاق في مشاركتك اعلاه الملف المفتوح المصدر وليس ملف MDE حتي تعم الفائده علي الجميع

وكل عام وانتم بخير

عيد سعيد

الى جميع اعضاء المنتدى

بمناسبة عيد الفطر المبارك

يسرني ويسعدني ان اقول لكم جميعا

كل عام وانتم بخير

واعاده الله علينا وعليكم اعوام مديده باليمن والبركات

من أجل خاطر مشرفنا الغالي محمد فؤاد

واخونا الغالي هاني عوض

وكافة اعضاء المنتدى

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

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

اولا : تشفير وفك التشفير عن اي جداول في القاعدة الحالية ( الملف مفتوح المصدر )

1. اختر الجدول المطلوب تشفيره

post-15367-1253403736_thumb.gif

2. اضغط على زر ( تشفير وفك التشفير ) لتظهر لك الحقول المختفيه

post-15367-1253403863_thumb.gif

3. ادخل اي رقم سري خاص بك ( سواء ارقام مثل 1234 او حروف مثل abcd او اي رموز ) مع ملاحظة عدم نسيان هذا الرقم السري لأنك سوف تحتاجه لإعادة فك التشفير عن الجدول ككل

ثم اضغط مفتاح انتر من لوحة المفاتيح Enter ليظهر لك زر الأمر ( نفذ ) فقم بالضغط عليه ليتم التشفير

post-15367-1253404159_thumb.gif

4. سيتم تشفير كافة حقول الجدول المختار فقط ( مربعات النص - الإرتباط التشعبي - المذكره ) اما مربعات الأرقام فلا يتم تشفيرها

post-15367-1253404346_thumb.gif

5. الآن قم بالخروج من البرنامج ثم اعد فتحه من جديد ( ولا تنسى الرقم السري الذي قمت بتشفير البيانات به وإلا سوف تفقد جميع البيانات في الجدول )

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

1. افتح قاعدة البيانات

2. اختر الجدول المطلوب فك التشفير عنه ( والذي سبق وان قمت بتشفيره ) مع تذكر الرقم السري الخاص بك سابقا

3. اضغط زر الأمر ( تشفير وفك التشفير )

4. ادخل الرقم السري السابق ( الذي شفرت به البيانات ) ثم اضغط انتر Enter من لوحة المفاتيح

5. اضغط على زر الأمر ( نفذ ) وسيتم فك التشفير عن جميع حقول وبيانات الجدول المختار

6. لا تنسى المرور على تعليمات البرنامج

post-15367-1253404159_thumb.gif

zaEncryptDecryptTables.rar

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

ثانيا : تشفير وفك التشفير عن جداول قواعد البيانات الخارجية ( الملف مفتوح المصدر )

1. اضغط على زر الأمر المعلم برقم ( 1 ) لفتح واختيار قاعدة بيانات خارجيه ( يوجد مرفق قاعدة بيانات خارجية zaMyDatabase.mdb بها جداول فقط مع البرنامج )

post-15367-1253406032_thumb.gif

2. اختر الجدول المطلوب تشفيره من القائمة التي ستظهر لك في جهة اليمين

3. اكمل بقية الخطوات كما في الشرح السابق

ملاحظة هامه وتنبيه 2 : لا تحاول ان تشفر الجدول لأكثر من مره ( يكفي ان تشفر الجدول لمرة واحده وتخرج من البرنامج )

zaEncryptDecryptExternalTables.rar

بالتوفيق لكم جميعا

تم تعديل هذه المشاركة بواسطة zahrah في 20 سبتمبر 2009 في 09:26

1
#14

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

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

كعادتك دائماً يا ام عهود كريمة محبة للخير ولنشر العلم ...

لا احد منا يحتاج الى تذكيره للدعاء لك فالجميع يدعو لك دائماً في حضورك وغيابك .. فقدرك كبير بيننا ويشهد الله على ذلك

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

#15

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

شكرً جزيلاً على هذا العطاء اللامتناهى تجاهك لكافة الأعضاء

بالفعل المثال ممتاز.. فبعد أن قام أخى محمد فؤاد بوضع الرابط الخاص بهذا المثال.. قمت باستخدامه ونجح الموضوع نجاح باهر...

وقد أثار فضولى رؤية الأكواد..

وها أنت بالفعل لم تبخلى علينا..

مع خالص تقديرى وامتنانى لكى..

وشكر خاص للأخ محمد فؤاد للإهتمام بالموضوع

#16

أختي ومعلمتي الفاضلة زهرة

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

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

شكراً لك مرة أخري

وكل عام وانت بألف خير وصحة ومتظرين منك المزيد من تقديم الموضوعات المهمة التي هي دائما اضافة لكل رواد هذا المنتدي الكبير

certifiedj.jpg

 

 

Image Hosted by ImageShack.us
#17

بسم الله الرحمن الرحيم

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

واخص بالشكر احتنا زهرة

الله يبارك فيك ويرزقك الجنة نحن واياك

#18

ما شاء الله - بارك الله فيكم وفى علمكم

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