ورود

View Full Version : سوال: کدکردن متن



SHD.NET
چهارشنبه 22 آذر 1391, 17:10 عصر
سلام .
خیلی وقتا پیش اومده که برای برنامه های کوچیک مجبوریم از فایل ها استفاده کنیم و اطلاعات رو توی فایل ذخیره کنیم و اونا رو فراخونی کنیم .
اما همونطور که می دونید امنیت در این روش به شدت میاد پایین و در حقیقت ما خودمون اطلاعات رو دو دستی تقدیم کاربر کردیم .می خواستم ببینم که بهترین کد و فانکشن برای کد کردن متن بدون مشکل و اررور چه روشیه ؟

میشه کدهاتونو اینجا قرار بدین ؟
پیشاپیش از راهنماییتون ممنون

SHD.NET
پنج شنبه 23 آذر 1391, 11:19 صبح
آقا من اینو توی تاپیک VB6 مطرح کرده بودم تا الان 10 نفر راهنماییم کرده بودن :ناراحت:
کسی بلد نیس یعنی ؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟ ؟؟؟؟؟ :لبخند:

SHD.NET
پنج شنبه 23 آذر 1391, 16:28 عصر
م کسی به این سوال ما جواب نداد

rezaprogrammer
جمعه 24 آذر 1391, 00:13 صبح
مهم نیست به چه شیوه میخاین ذخیره کنید. بهتره با کامپوننت های مناسب اونهارو Encrypt و برای خواندن از Decrypt استفاده کنید. یکی از ابزارهایی که من میشناسم که ابزاری برای کد کردن اطلاعات داره Chilkat هست.

SHD.NET
جمعه 24 آذر 1391, 11:10 صبح
ممنون از راهنماییتون :چشمک:

امین مستانی
جمعه 24 آذر 1391, 12:24 عصر
سلام علیکم

من این تابع رو در VB6 استفاده میکردم و قابل استفاده برای VB.NET هم هست :


تابع :


Function EncryptIt(ByVal strCodeword, ByVal strMessage, ByVal intAction) As String
Dim strAlphabet, intMessageChar, intCodewordChar
Dim intShiftAdjust, intHomeLocation
strAlphabet = "0@1#2$3%4^5&6*7=8-9+ AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYy Zz"
intCodewordChar = 1
For intMessageChar = 1 To Len(strMessage)
If InStr(1, strAlphabet, Mid(strMessage, intMessageChar, 1), vbBinaryCompare) > 0 Then
If InStr(1, strAlphabet, Mid(strCodeword, intCodewordChar, 1), vbBinaryCompare) > 0 Then
intShiftAdjust = InStr(1, strAlphabet, Mid(strCodeword, intCodewordChar, 1), vbBinaryCompare)
intHomeLocation = InStr(1, strAlphabet, Mid(strMessage, intMessageChar, 1), vbBinaryCompare)
If intAction = 0 Then intShiftAdjust = intHomeLocation - intShiftAdjust
If intAction = 1 Then intShiftAdjust = intHomeLocation + intShiftAdjust
If intShiftAdjust > Len(strAlphabet) Then intShiftAdjust = intShiftAdjust - Len(strAlphabet)
If intShiftAdjust < 1 Then intShiftAdjust = intShiftAdjust + Len(strAlphabet)
Else
intShiftAdjust = 1
End If
EncryptIt = EncryptIt & Mid(strAlphabet, intShiftAdjust, 1)
Else
EncryptIt = EncryptIt & Mid(strMessage, intMessageChar, 1)
End If
If intCodewordChar > Len(strCodeword) Then intCodewordChar = 1 Else intCodewordChar = intCodewordChar + 1
Next intMessageChar
Return EncryptIt
End Function



برای رمز گزاری (Encrypt) :



Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Text1.Text = EncryptIt("PassWord", Text1.Text, 0)
End Sub



برای رمز گشایی (Decrypt) :



Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
Text1.Text = EncryptIt("PassWord", Text1.Text, 1)
End Sub



البته یک پیام میده که متوجه منظورش نمیشم ولی برنامه درست کار میکنه .


موفق باشید

SHD.NET
جمعه 24 آذر 1391, 12:32 عصر
ممنون ولی این کد به خوبی کار نکرد . در برگرداندن کد مشکل داشت (دیکرایپت کردن)

امین مستانی
جمعه 24 آذر 1391, 12:50 عصر
در تابعی که من قرار دادم متوجه شدم رشته strAlphabet بین حروف Yy Zz فاصله افتاده و ویرایش کردم و درست نمیشه .
شما اون فاصله رو بردار برنامه درسته ..

امین مستانی
جمعه 24 آذر 1391, 13:07 عصر
چون کد در سایت با مشکل نمایش داده میشه در سایت CodeViewer قرار دادم :
http://codeviewer.org/view/code:301f

موفق باشید

tstsst
جمعه 24 آذر 1391, 16:18 عصر
سلام
روش های رمز کردن بسیار زیادی وجود داره چه برگشت پذیر چه برگشت ناپذیر (که برای چک کردن یک فایل پرحجم بعد از انتغال می تونی از اونا استفاده کنی مثل MD5) یکم جستوجو می خواد.

اول این رو ایمپورت کن

System.Security.Cryptography

بعد خود کد
Public Function Encrypt(ByVal plainText As String, ByVal pass As String) As String
Dim passPhrase As String = pass
Dim saltValue As String = "mySaltValue"
Dim hashAlgorithm As String = "SHA1"
Dim passwordIterations As Integer = 2
Dim initVector As String = "@1B2c3D4e5F6g7H8"
Dim keySize As Integer = 256
Dim initVectorBytes As Byte() = Encoding.ASCII.GetBytes(initVector)
Dim saltValueBytes As Byte() = Encoding.ASCII.GetBytes(saltValue)
Dim plainTextBytes As Byte() = Encoding.UTF8.GetBytes(plainText)
Dim password As New PasswordDeriveBytes(passPhrase, saltValueBytes, hashAlgorithm, passwordIterations)
Dim keyBytes As Byte() = password.GetBytes(keySize \ 8)
Dim symmetricKey As New RijndaelManaged()
symmetricKey.Mode = CipherMode.CBC
Dim encryptor As ICryptoTransform = symmetricKey.CreateEncryptor(keyBytes, initVectorBytes)
Dim memoryStream As New MemoryStream()
Dim cryptoStream As New CryptoStream(memoryStream, encryptor, CryptoStreamMode.Write)
cryptoStream.Write(plainTextBytes, 0, plainTextBytes.Length)
cryptoStream.FlushFinalBlock()
Dim cipherTextBytes As Byte() = memoryStream.ToArray()
memoryStream.Close()
cryptoStream.Close()
Dim cipherText As String = Convert.ToBase64String(cipherTextBytes)
Return cipherText
End Function

Public Function Decrypt(ByVal cipherText As String, ByVal pass As String) As String
Dim passPhrase As String = pass
Dim saltValue As String = "mySaltValue"
Dim hashAlgorithm As String = "SHA1"
Dim passwordIterations As Integer = 2
Dim initVector As String = "@1B2c3D4e5F6g7H8"
Dim keySize As Integer = 256
Dim initVectorBytes As Byte() = Encoding.ASCII.GetBytes(initVector)
Dim saltValueBytes As Byte() = Encoding.ASCII.GetBytes(saltValue)
Dim cipherTextBytes As Byte() = Convert.FromBase64String(cipherText)
Dim password As New PasswordDeriveBytes(passPhrase, saltValueBytes, hashAlgorithm, passwordIterations)
Dim keyBytes As Byte() = password.GetBytes(keySize \ 8)
Dim symmetricKey As New RijndaelManaged()
symmetricKey.Mode = CipherMode.CBC
Dim decryptor As ICryptoTransform = symmetricKey.CreateDecryptor(keyBytes, initVectorBytes)
Dim memoryStream As New MemoryStream(cipherTextBytes)
Dim cryptoStream As New CryptoStream(memoryStream, decryptor, CryptoStreamMode.Read)
Dim plainTextBytes As Byte() = New Byte(cipherTextBytes.Length - 1) {}
Dim decryptedByteCount As Integer = cryptoStream.Read(plainTextBytes, 0, plainTextBytes.Length)
memoryStream.Close()
cryptoStream.Close()
Dim plainText As String = Encoding.UTF8.GetString(plainTextBytes, 0, decryptedByteCount)
Return plainText
End Function

armin001
شنبه 25 آذر 1391, 14:02 عصر
سلام
آقا اینهمه عذاب واسه چی؟
چند ماه پیش برای رمز کردن یه سری داده به یه انکریپتور نیاز داشتم چون با الگوریتم های گفته شده آشنایی نداشتم خودم یه انکریپتور نوشتم که کد اسکی کاراکتر هارو بر هم میریزه و نوشته ناخوانا میشه البته برای اینکار از دو کلید استفاده میکنه یکی رو خودت بهش میدی یکیرو هم خودش استخراج میکنه(از توی متن) بنا بر این یک حروف در دو جمله مختلف مثل هم نیستند حتی در یک جمله هم دو حروف مثل هم نیستند ( مثلا a یجا t و یجا \)
حالا فایل dll رو میزارم نحوه استفاده ازشم توشه البته بگم رو زبان پارسی میلنگه نمیدونم چرا

96707

tstsst
شنبه 25 آذر 1391, 16:30 عصر
نه خوش بختانه الگوریتم Rijndael به فارسی گیر نمیده

SHD.NET
شنبه 25 آذر 1391, 16:43 عصر
ممنون از راهنماییت . ولی من زبان فارسی رو هم میخوام ساپورت کنه . خودم یه نمونه شو پیدا کردم. بفرمایید اینم کدش. فارسی رو هم ساپورت می کنه
Public Function AES_Encrypt(ByVal input As String, ByVal pass As String) As String
Dim AES As New System.Security.Cryptography.RijndaelManaged
Dim Hash_AES As New System.Security.Cryptography.MD5CryptoServiceProvi der
Dim encrypted As String = ""
Try
Dim hash(31) As Byte
Dim temp As Byte() = Hash_AES.ComputeHash(System.Text.UTF8Encoding.UTF8 .GetBytes(pass))
Array.Copy(temp, 0, hash, 0, 16)
Array.Copy(temp, 0, hash, 15, 16)
AES.Key = hash
AES.Mode = Security.Cryptography.CipherMode.ECB
Dim DESEncrypter As System.Security.Cryptography.ICryptoTransform = AES.CreateEncryptor
Dim Buffer As Byte() = System.Text.UTF8Encoding.UTF8.GetBytes(input)
encrypted = Convert.ToBase64String(DESEncrypter.TransformFinal Block(Buffer, 0, Buffer.Length))
Return encrypted
Catch ex As Exception
Throw ex
End Try
End Function

Public Function AES_Decrypt(ByVal input As String, ByVal pass As String) As String
Dim AES As New System.Security.Cryptography.RijndaelManaged
Dim Hash_AES As New System.Security.Cryptography.MD5CryptoServiceProvi der
Dim decrypted As String = ""
Try
Dim hash(31) As Byte
Dim temp As Byte() = Hash_AES.ComputeHash(System.Text.UTF8Encoding.UTF8 .GetBytes(pass))
Array.Copy(temp, 0, hash, 0, 16)
Array.Copy(temp, 0, hash, 15, 16)
AES.Key = hash
AES.Mode = Security.Cryptography.CipherMode.ECB
Dim DESDecrypter As System.Security.Cryptography.ICryptoTransform = AES.CreateDecryptor
Dim Buffer As Byte() = Convert.FromBase64String(input)
decrypted = System.Text.UTF8Encoding.UTF8.GetString(DESDecrypt er.TransformFinalBlock(Buffer, 0, Buffer.Length))
Return decrypted
Catch ex As Exception
Throw ex
End Try
End Function

:چشمک:\\\موفق باشید///:چشمک:

SHD.NET
شنبه 25 آذر 1391, 16:48 عصر
برای اطلاعات بیشتر به تاپیک زیر مراجعه کنید
کدکردن متن به روش AES (http://barnamenevis.org/showthread.php?370194-%D9%81%D8%A7%D9%86%DA%A9%D8%B4%D9%86-%DA%A9%D8%AF%DA%A9%D8%B1%D8%AF%D9%86-%D9%85%D8%AA%D9%86-%D8%A8%D9%87-%D8%B1%D9%88%D8%B4-AES&highlight=aes)

:چشمک:\\\موفق باشید///:چشمک:

Dr.Bronx
یک شنبه 26 آذر 1391, 15:39 عصر
این هم با MD5

Public Function GetMd5Hash(ByVal input As String) As String

Dim md5hash As MD5 = MD5.Create

Dim data As Byte() = md5hash.ComputeHash(Encoding.UTF8.GetBytes(input))

Dim sBuilder As New StringBuilder()

Dim i As Integer

For i = 0 To data.Length - 1
sBuilder.Append(data(i).ToString("x2"))

Next i

Return sBuilder.ToString()

End Function

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

Public Function VerifyMd5Hash(ByVal input As String, ByVal hash As String) As Boolean

Dim md5hash As MD5 = MD5.Create

Dim hashOfInput As String = GetMd5Hash(input)

Dim comparer As StringComparer = StringComparer.OrdinalIgnoreCase

If 0 = comparer.Compare(hashOfInput, hash) Then
Return True

Else
Return False

End If

End Function

برای چک کردن هم

If VerifyMd5Hash("123","123we23iopdsfoi534213pocoiw3") then
me.dispose()
end if

موفق باشید ./

tstsst
یک شنبه 26 آذر 1391, 16:12 عصر
این هم با MD5

...

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

...

برای چک کردن هم

...

موفق باشید ./

سلام
ایشون می خواهند که متن کریپت شده قابل دیکریپت هم باشه که تمام خوانواده MD از جمله MD5 برگشت ناپزیره البته روش های زیادی برای رمز کردن هست که از تعداد انگشتان دو دست هم بیشتره!
پست های 6 و 10 و 13 با توجه به این که فارسی هم ساپورت می کنن درسته می تونید استفاده کنید.

Hossis
شنبه 21 بهمن 1391, 08:52 صبح
روش MD5 متون طولانی رو برگشت نمی ده وب ه جاش , علامت سوال می آره ظاهرا
ولی روش AES درست کار می کنه
ولی به جای
Throw ex
بهتره همان مقدار ورودی رو برگشت بدید تا با خطا مواجه نشه