03-10-18, 01:30 PM
السلام عليكم ورحمة الله وبركاته
في تجربة تشفير البيانات في قاعدة البيانات
لعدم السماح بالاطلاع عليها الا عن طريق البرنامج فقط
أستخدمت قاعدة بيانات اكسس
واستخدمت الدالتين التاليتين للتشفير والفك
وجرت الامور تمام من اضافة وتعديل وعرض
ولكن توقفت امام عملية البحث
فقد كنت استخدم الكود التالي ويعمل تمام بدون مشاكل
وقد كنت استخدم دالة لملئ الDGV
وهى كالتالي ولكن لم استطع تطويعها مع البيانات المشفرة
فاستخدمت الطريقة التالية ونجحت
فأرجو المساعدة في عملية البحث وتحديدا استخدم like
وهناك امر اخر وهو عرض الصورة من الdgv الى picbox هل هناك طريقة للعرض مباشرة دون جلب الصورة من القاعدة بدلالة id الصف مثلا
ارفقت المثال الذي اعمل عليه
وجزاكم الله خيرا
في تجربة تشفير البيانات في قاعدة البيانات
لعدم السماح بالاطلاع عليها الا عن طريق البرنامج فقط
أستخدمت قاعدة بيانات اكسس
واستخدمت الدالتين التاليتين للتشفير والفك
كود :
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 الصف مثلا
ارفقت المثال الذي اعمل عليه
وجزاكم الله خيرا
لا إله إلا الله وحده لا شريك له له الملك وله الحمد وهو على كل شئ قدير
سبحان الله وبحمده سبحان الله العظيم
سبحان الله والحمد لله ولا إله إلا الله والله أكبر ولا حول ولا قوة إلا بالله العلى العظيم
رب أغفر لي