PDA

View Full Version : Encrypt And Dencrypt در SQL و ارتباط با کمبوباکس



پرستو پارسایی
شنبه 25 تیر 1401, 15:44 عصر
با سلام در حالت معمول با کد زیر اطلاعات رو از دیتابیس برای کمبو باکس دریافت میکنم و مشکلی نیست ولی اگر بخواهم اطلاعات رو Encrypt کنم و در دیتابیس ذخیره کنم ( که بدون مشکل انجام داده ام ) ، رو Dencrypt کنم و در کمبو باکس دریافت کنم با مشکل روبرو شدم ممنون میشم در صورت اطلاع نحوه صحیح دریافت اطلاعات در کمبو باکس رو راهنمایی بفرمایید . سپاسگزارم

Private Sub Load_Cmb()
Dim cn As New SqlConnection
With cn
.ConnectionString = Lbl1.Text
.Open()
End With
Dim dt As New DataTable
Dim da As New SqlDataAdapter("select User_N from TBL_Afra", cn)
da.Fill(dt)
If dt.Rows.Count > 0 Then
With Cmb_User
.Items.Clear()
For i As Integer = 0 To dt.Rows.Count - 1
.Items.Add(dt.Rows(i).Item("User_N"))
Next
.Text = Nothing
.SelectedIndex = -1
End With
End If
With cn
.Close()
.Dispose()
End With

prolog96
دوشنبه 27 تیر 1401, 12:49 عصر
سلام
من برای گریدویو انجام دادم . بعد از باند کردن به گریدویو داخل بلوک گذاشتم و جواب داد . من برای شماره موبایل های داخل دیتابیس این کار را انجام دادم .
شما تست کنید ببینید برای کامبو باکس جواب میده
Try
con.Open()
SqlCom.ExecuteNonQuery()
con.Close()
Catch ex As Exception
MsgBox("ERROR : " & ex.Message.ToString)
Finally
If con.State <> ConnectionState.Closed Then con.Close()
If (Not SqlCom Is Nothing) Then SqlCom.Dispose()

'این قسمت برای انکدینگ کردن و دوباره ریختن داخل گریدویو
If intUserRowCount > 0 Then
Dim j As Integer = intUserRowCount 'DataGridView1.RowCount - 2
For f As Integer = 2 To 5
For i As Integer = 0 To j
Dim strMob As String = DataGridView1.Rows(i).Cells(f).Value
If IsDBNull(strMob) Or strMob = Nothing Or strMob = "" Then
ElseIf strMob <> Nothing Or strMob <> "" Then
Dim arrIdDomain() As Byte = Convert.FromBase64String(strMob)
strMob = System.Text.Encoding.ASCII.GetString(arrIdDomain)
DataGridView1.Rows(i).Cells(f).Value = strMob
End If
Next
Next
End If

End Try

مطمئنا کارتون را راه میندازه. فقط یک کم باید کدها را تغییر بدید.
متغیر f میاد ستونهایی که نیازداریم را وارد حلقه میکنه .

ROSTAM2
دوشنبه 27 تیر 1401, 19:35 عصر
سلام.
برای Encryption نیاز هست یک الگوریتم داشته باشه که این الگوریتم یک کلید داره و یک IV که بصورت بایت ایجاد می شه و بصورت پیشفرض متغیر هست و باید ذخیره بشه و سوال اینجاست که کلید و IV باید کجا ذخیره بشن که امنیت کامل حفظ بشه؟! تو دیتابیس یا توی کدنویسی برنامه بصورت یک ثابت؟!

پرستو پارسایی
دوشنبه 27 تیر 1401, 20:39 عصر
سلام از پاسخ شما سپاسگزارم در مورد Encyption مشکلی ندارم برای Dencypt هم برای هر آیتم در تکست باکس یا لیبل براحتی کار میکنه , ,ولی اینکه کل آیتم ها رو Dencrypt شده در کمبوباکس Add کنم به مشکل خوردم ، lV و کلید بصورت کد نویسی و ثابت هستند . روی کد شما تست میکنم و نتیجه رو اطلاع میدم .سپاس

prolog96
دوشنبه 27 تیر 1401, 22:18 عصر
سلام
من برای Encryption از کد زیر استفاده میکنم . بدون کلید

Dim strMobail As String = Convert.ToBase64String(System.Text.Encoding.ASCII. GetBytes(TxtBxMobail.Text))



,ولی اینکه کل آیتم ها رو Dencrypt شده در کمبوباکس Add کنم به مشکل خوردم
برای این مورد از همون روشی که گفتم ، فکر کنم انجام بشه . من که برای گریدویو انجام دادم و جواب داد.

حالا خودم هم برای کامبوباکس امتحان میکنم . خبر میدم.

موفق باشید

prolog96
سه شنبه 28 تیر 1401, 00:13 صبح
سلام

به این روش تونستم با کامبوباکس هم اجرا بشه

Dim strSql As String = "SELECT IdLandowner, mobail, TellHome, TellOffice, TellSyntax FROM TblEstLandowner ORDER BY IdLandowner"
Dim SqlCom As SqlCommand
SqlCom = New SqlCommand(strSql, con)
SqlCom.CommandType = Data.CommandType.Text
Dim Dta As SqlDataAdapter = Nothing
Dim Dsa As DataSet

Try
If con.State <> ConnectionState.Open Then
con.Open()
End If
SqlCom.ExecuteNonQuery()
Dta = New SqlDataAdapter(SqlCom)
Dsa = New DataSet
Dta.Fill(Dsa, "TblEstLandowner")
CmbBxSMobil.DataSource = Dsa.Tables(0).DefaultView
CmbBxSMobil.DisplayMember = "mobail"
CmbBxSMobil.ValueMember = "IdLandowner"
CmbBxSMobil.DataBindings.Clear()
CmbBxSMobil.DataBindings.Add(New Binding("datasource", Dsa, "TblEstLandowner"))
con.Close()
Finally
If (Not SqlCom Is Nothing) Then SqlCom.Dispose()
If con.State <> ConnectionState.Closed Then con.Close()

Dim intRowCount As UInteger = Dsa.Tables(0).Rows.Count - 1
Label9.Text = intRowCount
If intRowCount > 0 Then
' For f As Integer = 1 '2 To 5
For i As Integer = 0 To intRowCount
Dim strMob As String = Dsa.Tables(0).Rows(i).Item(1)
If IsDBNull(strMob) Or strMob = Nothing Or strMob = "" Then
ElseIf strMob <> Nothing Or strMob <> "" Then
Dim arrIdDomain() As Byte = Convert.FromBase64String(strMob)
strMob = System.Text.Encoding.ASCII.GetString(arrIdDomain)
Dsa.Tables(0).Rows(i).Item(1) = strMob
End If
Next
' Next
End If

End Try

Mahmoud.Afrad
چهارشنبه 29 تیر 1401, 16:26 عصر
سلام
من برای Encryption از کد زیر استفاده میکنم . بدون کلید

Dim strMobail As String = Convert.ToBase64String(System.Text.Encoding.ASCII. GetBytes(TxtBxMobail.Text))



برای این مورد از همون روشی که گفتم ، فکر کنم انجام بشه . من که برای گریدویو انجام دادم و جواب داد.

حالا خودم هم برای کامبوباکس امتحان میکنم . خبر میدم.

موفق باشید

البته اینی که شما نوشتی encryption نیست و هر کسی میتونه اونو به حالت اول برگردونه.

prolog96
پنج شنبه 30 تیر 1401, 14:54 عصر
البته اینی که شما نوشتی encryption نیست و هر کسی میتونه اونو به حالت اول برگردونه.

سلام
پیشنهاد شما چی هست؟
یه راه حل بهتر بگید

ممنون

پرستو پارسایی
پنج شنبه 30 تیر 1401, 18:06 عصر
از دوستان بخاطر توجه شما به موضوع این تاپیک سپاسگزارم ولی Dencrytion در کمبوباکس کماکان بی نتیجه بود
نمونه ای نزدیک به کدی که من استفاده میکنم برای Encription And Dencryption

Private Function Encrypt(ByVal clearText As String) As String
Dim EncryptionKey As String ="MAKV2SPBNI99212"
Dim clearBytes() As Byte = Encoding.Unicode.GetBytes(clearText)
Using encryptor As Aes = Aes.Create()
Dim pdb As New Rfc2898DeriveBytes(EncryptionKey,New Byte() { &H49, &H76, &H61, &H6e, &H20, &H4d, &H65, &H64, &H76, &H65, &H64, &H65, &H76 })
encryptor.Key = pdb.GetBytes(32)
encryptor.IV = pdb.GetBytes(16)
Using ms As New MemoryStream()
Using cs As New CryptoStream(ms, encryptor.CreateEncryptor(), CryptoStreamMode.Write)
cs.Write(clearBytes, 0, clearBytes.Length)
cs.Close()
End Using
clearText = Convert.ToBase64String(ms.ToArray())
End Using
End Using
Return clearText
End Function


Private Function Decrypt(ByVal cipherText As String) As String
Dim EncryptionKey As String ="MAKV2SPBNI99212"
Dim cipherBytes() As Byte = Convert.FromBase64String(cipherText)
Using encryptor As Aes = Aes.Create()
Dim pdb As New Rfc2898DeriveBytes(EncryptionKey,New Byte() { &H49, &H76, &H61, &H6e, &H20, &H4d, &H65, &H64, &H76, &H65, &H64, &H65, &H76 })
encryptor.Key = pdb.GetBytes(32)
encryptor.IV = pdb.GetBytes(16)
Using ms As New MemoryStream()
Using cs As New CryptoStream(ms, encryptor.CreateDecryptor(), CryptoStreamMode.Write)
cs.Write(cipherBytes, 0, cipherBytes.Length)
cs.Close()
End Using
cipherText = Encoding.Unicode.GetString(ms.ToArray())
End Using
End Using
Return cipherText
End Function

prolog96
پنج شنبه 30 تیر 1401, 18:56 عصر
سلام
ممنون

اما به MemoryStream ارور میده . چه کتابخانه ای را ایمپورت میکنید ؟

پرستو پارسایی
پنج شنبه 30 تیر 1401, 19:06 عصر
Imports System.Security.Cryptography

prolog96
پنج شنبه 30 تیر 1401, 19:24 عصر
Imports System.Security.Cryptography

سپاسگزارم از شما . ممنون
این را داشتم توی فایلم . اما


برای خواندن و نوشتن در فایل ها و کار با فایل ها در VB.NET و C#.NET
Streamها ابزاری برای خواندن و نوشتن در دیسک و نیز ارتباطات بین شبکه ای هستند.

کتابخانه ش هم اینه
Imports System.IO
باید اضافه کنیم

prolog96
پنج شنبه 30 تیر 1401, 20:19 عصر
سلام


از دوستان بخاطر توجه شما به موضوع این تاپیک سپاسگزارم ولی Dencrytion در کمبوباکس کماکان بی نتیجه بود
نمونه ای نزدیک به کدی که من استفاده میکنم برای Encription And Dencryption


من با کدهای شما شماره تلفن ها را کد کردم و با روش که توی پست 6 همین تاپیک که براتون فرستادم دیکد کردم و شماره ها را تو کامبوباکس درست نشون میده

ROSTAM2
جمعه 31 تیر 1401, 07:24 صبح
سلام.
در زمان Decryption برای CryptoStream پارامتر CryptoStreamMode باید Read باشه نه Write.

153919

پرستو پارسایی
جمعه 31 تیر 1401, 12:03 عصر
prolog96 (https://barnamenevis.org/member.php?329923-prolog96) گرامی اگر امکان داره کد اصلاح شده رو که تست کردید اشتراک بگذارید . و آیا شما در کمبوباکس کل شماره تلفن ها رو Dencrypt کرده اید یا یک شماره در کمبوباکس Add کردید سپاس

prolog96
شنبه 01 مرداد 1401, 11:52 صبح
prolog96 (https://barnamenevis.org/member.php?329923-prolog96) گرامی اگر امکان داره کد اصلاح شده رو که تست کردید اشتراک بگذارید . و آیا شما در کمبوباکس کل شماره تلفن ها رو Dencrypt کرده اید یا یک شماره در کمبوباکس Add کردید سپاس

سلام

یک نمونه برای کامبوباکس گذاشتم. خدمت شما
در کدها توضیحات را نوشتم
فیلدهای که باید برای شماره تماس ها بسازید همه را NVarChar, 50 انتخاب کنید .
153925153927
عکس های قبل و بعد را هم گذاشتم .