تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
[سؤال] إستفسار عن البحث في حقول تم تشفيرها
#1
السلام عليكم ورحمة الله وبركاته
في تجربة تشفير البيانات في قاعدة البيانات
لعدم السماح بالاطلاع عليها الا عن طريق البرنامج فقط
أستخدمت قاعدة بيانات اكسس
واستخدمت الدالتين التاليتين للتشفير والفك
كود :
   Public Function Encrypt(ByVal text As String, ByVal key As String) As String
       Try
           Dim crp As New TripleDESCryptoServiceProvider
           Dim uEncode As New UnicodeEncoding
           Dim bytPlainText() As Byte = uEncode.GetBytes(text)
           Dim stmCipherText As New MemoryStream
           Dim slt() As Byte = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}
           Dim pdb As New Rfc2898DeriveBytes(key, slt)
           Dim bytDerivedKey() As Byte = pdb.GetBytes(24)

           crp.Key = bytDerivedKey
           crp.IV = pdb.GetBytes(8)

           Dim csEncrypted As New CryptoStream(stmCipherText, crp.CreateEncryptor(), CryptoStreamMode.Write)

           csEncrypted.Write(bytPlainText, 0, bytPlainText.Length)
           csEncrypted.FlushFinalBlock()
           Return Convert.ToBase64String(stmCipherText.ToArray())
       Catch ex As Exception
           '  Throw
       End Try
   End Function
   Function Decrypt(ByVal text As String, ByVal key As String) As String
       Dim crp As TripleDESCryptoServiceProvider
       Try
           crp = New TripleDESCryptoServiceProvider
           Dim uEncode As New UnicodeEncoding
           Dim bytCipherText() As Byte = Convert.FromBase64String(text)
           Dim stmPlainText As New MemoryStream
           Dim stmCipherText As New MemoryStream(bytCipherText)
           Dim slt() As Byte = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}
           Dim pdb As New Rfc2898DeriveBytes(key, slt)
           Dim bytDerivedKey() As Byte = pdb.GetBytes(24)
           crp.Key = bytDerivedKey
           crp.IV = pdb.GetBytes(8)

           Dim csDecrypted As New CryptoStream(stmCipherText, crp.CreateDecryptor(), CryptoStreamMode.Read)
           Dim sw As New StreamWriter(stmPlainText)
           Dim sr As New StreamReader(csDecrypted)
           sw.Write(sr.ReadToEnd)
           sw.Flush()
           csDecrypted.Clear()
           crp.Clear()
           Return uEncode.GetString(stmPlainText.ToArray())
       Catch ex As Exception
           'Throw
       End Try
   End Function


وجرت الامور تمام من اضافة وتعديل وعرض 
ولكن توقفت امام عملية البحث 
فقد كنت استخدم الكود التالي ويعمل تمام بدون مشاكل
كود :
   Private Sub TextBox5_TextChanged(sender As Object, e As EventArgs) Handles TxtSearch.TextChanged
       Dim sql As String = ""
       If TxtSearch.Text.Length = 0 Then
           sql = "select * from Table1 order by ID"
       Else
           Select Case CmboSearch.SelectedIndex
               Case 0

                   sql = "select * from Table1 where username like '%" & TxtSearch.Text.Trim & "%" & "'" & " order by username"
               Case 1
                   sql = "select * from Table1 where phone like '%" & TxtSearch.Text.Trim & "%" & "'" & " order by phone"
               Case 2
                   sql = "select * from Table1 where adress like '%" & TxtSearch.Text.Trim & "%" & "'" & " order by adress"
           End Select
       End If
       FillDGV(DGV, sql)

   End Sub

وقد كنت استخدم دالة لملئ الDGV 
وهى كالتالي ولكن لم استطع تطويعها مع البيانات المشفرة
كود :
 Public Sub showdgv(ByVal Pudgv, ByVal sql)
       ' Dim Pudgv As DataGridView
       Dim adp As New OleDb.OleDbDataAdapter(sql, con)
       Dim ds As New DataSet
       adp.Fill(ds)
       Dim dt = ds.Tables(0)

       Pudgv.AutoGenerateColumns = False
       Pudgv.DataSource = dt.DefaultView
   End Sub

فاستخدمت الطريقة التالية ونجحت 
كود :
 Public Function FillDGV(DGV As DataGridView, Sql As String)
       DGV.Rows.Clear()

       Dim adp As New OleDb.OleDbDataAdapter(Sql, con)
       Dim ds As New DataSet
       adp.Fill(ds)
       Dim dt = ds.Tables(0)
       For i = 0 To dt.Rows.Count - 1
           DGV.Rows.Add()
           DGV.Rows(i).Cells(0).Value = (dt.Rows(i).Item("id"))
           DGV.Rows(i).Cells(1).Value = Decrypt(dt.Rows(i).Item("Username"), "vb.net")
           DGV.Rows(i).Cells(2).Value = Decrypt(dt.Rows(i).Item("phone"), "vb.net")
           DGV.Rows(i).Cells(3).Value = Decrypt(dt.Rows(i).Item("adress"), "vb.net")

           Dim PIC_() As Byte = CType(dt.Rows(i).Item("Pic"), Byte())
           Dim MS As New MemoryStream(PIC_)
           DGV.Rows(i).Cells(4).Value = Image.FromStream(MS)
       Next
   End Function

فأرجو المساعدة في عملية البحث وتحديدا استخدم like
وهناك امر اخر وهو عرض الصورة من الdgv الى picbox   هل هناك طريقة للعرض مباشرة دون جلب الصورة من القاعدة بدلالة id الصف مثلا

ارفقت المثال الذي اعمل عليه 
وجزاكم الله خيرا


الملفات المرفقة
.rar   Test_Search_Encrypt_Decrypt.rar (الحجم : 80.68 ك ب / التحميلات : 22)
لا إله إلا الله وحده لا شريك له له الملك وله الحمد وهو على كل شئ قدير
سبحان الله وبحمده سبحان الله العظيم
سبحان الله والحمد لله ولا إله إلا الله والله أكبر ولا حول ولا قوة إلا بالله العلى العظيم
رب أغفر لي 

الرد }}}
تم الشكر بواسطة:
#2
وعليكم السلام ورحمة الله وبركاتة 


أليس من الأفضل إستخدام ( Password ) قوي على قاعدة البيانات MS Access ؟
وبذلك لن يتم فك الرمز إلى من خلال البرنامج فقط . 

هل يجب تشفيرها بهذة الطريقة أم أنها كما ذكرت ( تجربة تشفير البيانات في قاعدة البيانات ) ؟
الرد }}}
تم الشكر بواسطة: princelovelorn
#3
(03-10-18, 02:01 PM)عبدالله الدوسري كتب : وعليكم السلام ورحمة الله وبركاتة 


أليس من الأفضل إستخدام ( Password ) قوي على قاعدة البيانات MS Access ؟
وبذلك لن يتم فك الرمز إلى من خلال البرنامج فقط . 

هل يجب تشفيرها بهذة الطريقة أم أنها كما ذكرت ( تجربة تشفير البيانات في قاعدة البيانات ) ؟

أستاذى الفاضل عبد الله الدوسرى
جزاك الله خيرا على الأهتمام

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

الرد }}}
تم الشكر بواسطة: عبدالله الدوسري
#4
أخي الكريم شاهدت مثالك بالنسبة للبحث اذا لم يتطابق الاسمان لا يمكن البحث فالقيمة بالجدول مشفرة و في عملية البحث لم تشفر النص في التكست قبل البحث .

لاحظ التالي :
حرف a = Gr38x+AQeM0
الحرفان al =
V9b17pyZJhk=

كلمة ali = W6L5tOGp3UU

فأين أوجه التشابه .

بالنسبة لعملية البحث التي قمت بها لم تكن ناجحة فقد بحثت عن حرف عادي غير مشفر أي البحث عن اسم بستعلام like مستحيلة فقط إذا تطابق الاسمان تطابق .

هذا مثالك مع بعض التعديلات .


الملفات المرفقة
.rar   Test_Search_Encrypt_Decrypt.rar (الحجم : 121.45 ك ب / التحميلات : 19)
الرد }}}
تم الشكر بواسطة: princelovelorn , عبدالله الدوسري
#5
(03-10-18, 03:19 PM)asemshahen5 كتب : أخي الكريم شاهدت مثالك بالنسبة للبحث اذا لم يتطابق الاسمان لا يمكن البحث فالقيمة بالجدول مشفرة و في عملية البحث لم تشفر النص في التكست قبل البحث .

لاحظ التالي :
حرف a = Gr38x+AQeM0
كلمة ali = W6L5tOGp3UU

فأين أوجه التشابه .

بالنسبة لعملية البحث التي قمت بها لم تكن ناجحة فقد بحثت عن حرف عادي غير مشفر أي البحث عن اسم بستعلام like مستحيلة فقط إذا تطابق الاسمان تطابق .

هذا مثالك مع بعض التعديلات .

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

حضرتك وصلت لها ولكن بالعكس
وبالفعل أخى كلامك صحيح ففي كلا الحالتين سواء like او بدونها يجب وجود تطابق في الكلمة المراد البحث عنها 
مع تشفير النص طبعا في textbox search

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

الرد }}}
#6
(03-10-18, 03:40 PM)princelovelorn كتب :
(03-10-18, 03:19 PM)asemshahen5 كتب : أخي الكريم شاهدت مثالك بالنسبة للبحث اذا لم يتطابق الاسمان لا يمكن البحث فالقيمة بالجدول مشفرة و في عملية البحث لم تشفر النص في التكست قبل البحث .

لاحظ التالي :
حرف a = Gr38x+AQeM0
كلمة ali = W6L5tOGp3UU

فأين أوجه التشابه .

بالنسبة لعملية البحث التي قمت بها لم تكن ناجحة فقد بحثت عن حرف عادي غير مشفر أي البحث عن اسم بستعلام like مستحيلة فقط إذا تطابق الاسمان تطابق .

هذا مثالك مع بعض التعديلات .

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

حضرتك وصلت لها ولكن بالعكس
وبالفعل أخى كلامك صحيح ففي كلا الحالتين سواء like او بدونها يجب وجود تطابق في الكلمة المراد البحث عنها 
مع تشفير النص طبعا في textbox search

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

هذا مثال بما طلبت قد جربت البحث و نجح .


الملفات المرفقة
.rar   Test_Search_Encrypt_Decrypt.rar (الحجم : 139.07 ك ب / التحميلات : 17)
الرد }}}
تم الشكر بواسطة: عبدالله الدوسري , princelovelorn
#7
(03-10-18, 02:37 PM)princelovelorn كتب : أستاذى الفاضل عبد الله الدوسرى
جزاك الله خيرا على الأهتمام

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


قواعد البيانات الجديدة - ACCDB  - مع (كلمة مرور قوية) صعب جداً جداً كسر كلمة المرور.

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

ومع ذلك يجب تشفير وتشويس الملف التنفيذي للبرنامج (exe) , غير ذلك يمكن رؤية كل شيء , نص الإتصال إذا كانت قاعدة البيانات محمية بكلمة مرور , يمكن رؤية كلمة المرور في نص الإتصال أو حتى لو كنت تقوم بتكوينها من مكان آخر في الكود.
وحتى لو إستخدمت الطريقة التي تتبعها في التشفير بإستخدام دالتين لديك في البرنامج (بدون تشويس الـ exe) يمكن إعادة كتابت الدالتين بكل سهولة , وعندها أستطيع الإتصال ببقاعدة البيانات وفك تشفير جميع البيانات وعرضها, كما تفعل أنت بالضبط.

أعلى مستوى للحماية تستطيع عملة هو بوضع كلمة مرور قوية جداً ( بطول أكثر من 20 حرف ورمز إلخ...) على قاعدة بيانات من نوع ACCDB + عمل تشويش على ملفات البرنامج.





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

فالتجربة خير برهان , وأكيد تزيد في العلم.


تحياتي لك .
الرد }}}
تم الشكر بواسطة: princelovelorn
#8
(03-10-18, 04:50 PM)asemshahen5 كتب : هذا مثال بما طلبت قد جربت البحث و نجح .

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


(03-10-18, 04:53 PM)عبدالله الدوسري كتب : قواعد البيانات الجديدة - ACCDB  - مع (كلمة مرور قوية) صعب جداً جداً كسر كلمة المرور.

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

ومع ذلك يجب تشفير وتشويس الملف التنفيذي للبرنامج (exe) , غير ذلك يمكن رؤية كل شيء , نص الإتصال إذا كانت قاعدة البيانات محمية بكلمة مرور , يمكن رؤية كلمة المرور في نص الإتصال أو حتى لو كنت تقوم بتكوينها من مكان آخر في الكود.
وحتى لو إستخدمت الطريقة التي تتبعها في التشفير بإستخدام دالتين لديك في البرنامج (بدون تشويس الـ exe) يمكن إعادة كتابت الدالتين بكل سهولة , وعندها أستطيع الإتصال ببقاعدة البيانات وفك تشفير جميع البيانات وعرضها, كما تفعل أنت بالضبط.

أعلى مستوى للحماية تستطيع عملة هو بوضع كلمة مرور قوية جداً ( بطول أكثر من 20 حرف ورمز إلخ...) على قاعدة بيانات من نوع ACCDB + عمل تشويش على ملفات البرنامج.


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

فالتجربة خير برهان , وأكيد تزيد في العلم.


تحياتي لك .

أخي وأستاذى الفاضل عبدالله الدوسري


أولا ملحوظة طول كلمة المرور  في قواعد ACCDB نجحت بالفعل 
ثانيا ((( أو حتى لو كنت تقوم بتكوينها من مكان آخر في الكود )))   معلومة جديدة بالنسبة لي وسأحاول أن أطبقها بأسلوب القفزات التى تحدث عنها الأخ الفاضل ViV

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

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

الرد }}}
تم الشكر بواسطة: asemshahen5 , عبدالله الدوسري



التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم