PDA

View Full Version : توابع Hashing دات نت، فارسی رو ساپورت نمیکنه



Developer Programmer
سه شنبه 04 خرداد 1389, 20:42 عصر
توسط توابع خود دات نت من کدی نوشتم که بتونه کد رو انکریپت یا دکریپت کنه...منتها ظاهرا وقتی رشته فارسی باشه، درست دکریپت نمیکنن.

دوستان چیکار میکنن؟



Imports System.Text
Imports System.Collections.Specialized
Imports System.Security.Cryptography

Public Class ClassEncryption
Private Shared lbtVector() As Byte = {240, 3, 45, 29, 0, 76, 173, 59}
Private Shared lscryptoKey As String = "Afshin"

Public Shared Function psDecrypt(ByVal sQueryString As String) As String

Dim buffer() As Byte
Dim loCryptoClass As New TripleDESCryptoServiceProvider
Dim loCryptoProvider As New MD5CryptoServiceProvider

Try
buffer = Convert.FromBase64String(sQueryString)
loCryptoClass.Key = loCryptoProvider.ComputeHash(ASCIIEncoding.ASCII.G etBytes(lscryptoKey))
loCryptoClass.IV = lbtVector
Return Encoding.ASCII.GetString(loCryptoClass.CreateDecry ptor().TransformFinalBlock(buffer, 0, buffer.Length()))
Catch ex As Exception
Throw ex
Finally
loCryptoClass.Clear()
loCryptoProvider.Clear()
loCryptoClass = Nothing
loCryptoProvider = Nothing
End Try
End Function

Public Shared Function psEncrypt(ByVal sInputVal As String) As String

Dim loCryptoClass As New TripleDESCryptoServiceProvider
Dim loCryptoProvider As New MD5CryptoServiceProvider
Dim lbtBuffer() As Byte

Try
lbtBuffer = System.Text.Encoding.ASCII.GetBytes(sInputVal)
loCryptoClass.Key = loCryptoProvider.ComputeHash(ASCIIEncoding.ASCII.G etBytes(lscryptoKey))
loCryptoClass.IV = lbtVector
sInputVal = Convert.ToBase64String(loCryptoClass.CreateEncrypt or().TransformFinalBlock(lbtBuffer, 0, lbtBuffer.Length()))
psEncrypt = sInputVal
Catch ex As CryptographicException
Throw ex
Catch ex As FormatException
Throw ex
Catch ex As Exception
Throw ex
Finally
loCryptoClass.Clear()
loCryptoProvider.Clear()
loCryptoClass = Nothing
loCryptoProvider = Nothing
End Try
End Function
End Class

alireza_s_84
سه شنبه 04 خرداد 1389, 20:55 عصر
سلام دوست من شما از MD5 برای هش کردن استفاده کردی این الگوریتم یکطرفه ست امکان بازگرداندن اون وجود نداره. از الگوریتمهای دیگه استفاده کنید.
موفق باشید

Peyman.Gh
سه شنبه 04 خرداد 1389, 21:10 عصر
از کلاس DESCryptoServiceProvider استفاده کنید.

Developer Programmer
سه شنبه 04 خرداد 1389, 21:29 عصر
این الگوریتم یکطرفه ست امکان بازگرداندن اون وجود نداره

از توجهتون سپاسگذارم. لیکن کد فوق، هم encrypt و هم decrypt رو بدرستی انجام میده. لیکن موقع نمایش حروف رشته های فارسی "?" می ذاره. در حالیکه در رشته های انگلیسی اینطور نیست.
لازم به ذکره که تنظیمات ویندوزم درسته.

علیرضا مداح
چهارشنبه 05 خرداد 1389, 19:00 عصر
سلام،
این مسئله طبیعیست،
شما به جای ASCII Encoding باید از Unicode Encoding استفاده نمایید، برروی دو متد GetBytes و GetString کلاس های زیر مطالعه نمایید:


System.Encoding.UTF8
System.Encoding.UTF7
System.Encoding.Unicode

در لینک زیر مثالی در این خصوص وجود دارد:
http://www.obviex.com/samples/Code.aspx?Source=EncryptionVB&Title=Symmetric%20Key%20Encryption&Lang=VB.NET

در ضمن کاری که شما انجام می دهید، Encryption نام دارد و با Hashing تفاوت دارد، لطفا" برروی این دو مفهوم مطالعه نمایید،/