PDA

View Full Version : خبر: Encode و Decode کردن یک رشته



Netsky
شنبه 28 دی 1387, 13:26 عصر
سلام دوستان . من میخام یه متن رو در ویبی دات نت اینکد و دیکد کنم .
شما چه راهی به من پیشنهاد میکنید .
اگه سورس بزارید خیلی خیلی ممنون میشم .

Mehdi Asgari
شنبه 28 دی 1387, 13:38 عصر
بستگی به مقصودت داره
میتونی از Base64 استفاده کنی .
میتونی خودت یدونه کاستوم ایجاد کنی
اگه مقاصد امنیتی مد نظرته باید یه الگوریتم رمزگذاری استفاده کنی.

nokhodsiah2001
شنبه 28 دی 1387, 15:06 عصر
سلام من این کار رو کردم البته خودم یک متد من درآوردی رو برای کارم انتخاب کردم ولی من زیاد نیاز به امنیت نداشتم فقط می خواستم یک سری کاراکترهایی داشته باشم که کاربر معمولی سر در نیاره

parsehvb
شنبه 28 دی 1387, 16:43 عصر
این مثال رو نگاه کن ببین به دردت می خوره منبعش رو فراموش کردم

Netsky
شنبه 28 دی 1387, 18:56 عصر
این مثال رو نگاه کن ببین به دردت می خوره منبعش رو فراموش کردم

سلام . خیلی ممنون از زحمتی که کشیده بودی .
البته برنامه یه مشکل داشت .
ولی منظور من اینکد کردن فایل نبود . منظور من این بود که یه رشته متنی رو چه طوری به حروف نامفهوم تبدیل کنیم و بعد دوباره اون رو دیکد ( حالت قبل از اینکد کردن ) کنیم .
با تشکر ............................

mostafaaa
شنبه 28 دی 1387, 19:34 عصر
سلام دوست من
برای این کار راه حل زیاده، خود دات نت تقریبا تمامی الگوریتمهای رمزنگاری معروف رو توی فضانام(NameSpace) System.Security.Cryptography داره.
الا ایحال من دو تا قطعه کد کوچولو که از الگوریتم RSA استفاده شده برات میزارم ، امیدوارم بدردت بخوره!!
برای رمزکردن(Encrypt) :

Public Function Encrypt(ByVal Parameters As RSAParameters, ByVal DataToEcrypt() As Byte) As Byte()
Dim ERSA As RSACryptoServiceProvider = RSA.Create
ERSA.ImportParameters(Parameters)
Return ERSA.Encrypt(DataToEcrypt, True)
End Function
برای باز کردن رمز(Decrypt) :

Public Function Decrypt(ByVal Parameters As RSAParameters, ByVal DataToDecrypt() As Byte) As Byte()
Dim DRSA As RSACryptoServiceProvider = RSA.Create
DRSA.ImportParameters(Parameters)
Return DRSA.Decrypt(DataToDecrypt, True)
End Function

.:KeihanCPU:.
یک شنبه 29 دی 1387, 13:57 عصر
ممنون از شما mostafaaa (http://barnamenevis.org/forum/member.php?u=53462)
با استفاده از کدهای بالا چطور میتونم مثلا کلمه salam رو Encrypt کنم؟

nokhodsiah2001
یک شنبه 29 دی 1387, 15:19 عصر
سلام


keihan عزیز برات توضیح دادم فکر کنم این کمکت کنه البته فقط در مورد اعداد تهیه شده میتونی برای حروف هم تکمیلش کنی اگر کردی برای بقیه هم بذار تا استفاده کنن





Public Function Coder(ByVal Tool As Integer, ByVal adad As String) As codeed
Dim i As Integer
'cu = TxtName.Text.Length طول رمز
Dim Pass(Tool) As String
Dim PassSave(Tool) As String
Dim strcodshodeh As String = ""

i = 0
Do While i < Tool

Pass(i) = Val(adad(i))
Select Case Pass(i)
Case 0
PassSave(i) = "P"
Exit Select
Case 1
PassSave(i) = "a"
Exit Select
Case 2
PassSave(i) = "@"
Exit Select
Case 3
PassSave(i) = "R"
Exit Select
Case 4
PassSave(i) = "#"
Exit Select
Case 5
PassSave(i) = "W"
Exit Select
Case 6
PassSave(i) = "$"
Exit Select
Case 7
PassSave(i) = "*"
Exit Select
Case 8
PassSave(i) = "~"
Exit Select
Case 9
PassSave(i) = "!"
Exit Select

End Select
i = i + 1
Loop
Select Case Tool
Case 1
strcodshodeh = (PassSave(0))
Exit Select
Case 2
strcodshodeh = (PassSave(1) & PassSave(0))
Exit Select
Case 3
strcodshodeh = (PassSave(2) & PassSave(1) & PassSave(0))
Exit Select
Case 4
strcodshodeh = (PassSave(3) & PassSave(2) & PassSave(1) & PassSave(0))
Exit Select
Case 5
strcodshodeh = (PassSave(4) & PassSave(3) & PassSave(2) & PassSave(1) & PassSave(0))
Exit Select
Case 6
strcodshodeh = (PassSave(5) & PassSave(4) & PassSave(3) & PassSave(2) & PassSave(1) & PassSave(0))
Exit Select
Case 7
strcodshodeh = (PassSave(6) & PassSave(5) & PassSave(4) & PassSave(3) & PassSave(2) & PassSave(1) & PassSave(0))
Exit Select
Case 8
strcodshodeh = (PassSave(7) & PassSave(6) & PassSave(5) & PassSave(4) & PassSave(3) & PassSave(2) & PassSave(1) & PassSave(0))
Exit Select
Case 9
strcodshodeh = (PassSave(8) & PassSave(7) & PassSave(6) & PassSave(5) & PassSave(4) & PassSave(3) & PassSave(2) & PassSave(1) & PassSave(0))
Exit Select
Case 10
strcodshodeh = (PassSave(9) & PassSave(8) & PassSave(7) & PassSave(6) & PassSave(5) & PassSave(4) & PassSave(3) & PassSave(2) & PassSave(1) & PassSave(0))
Exit Select



End Select
Coder.Code_Shodeh = strcodshodeh
End Function

Public Function DeCoder(ByVal Tool As Integer, ByVal harf As String) As Decodeed
Dim i As Integer
Dim StrDecodeh As String = ""
'cu = TxtName.Text.Length طول رمز
Dim Pass(Tool) As String
Dim PassSave(Tool) As String

i = 0
Do While i < Tool


Pass(i) = harf(i)
Select Case Pass(i)
Case "P"
PassSave(i) = "0"
Exit Select
Case "a"
PassSave(i) = "1"
Exit Select
Case "@"
PassSave(i) = "2"
Exit Select
Case "R"
PassSave(i) = "3"
Exit Select
Case "#"
PassSave(i) = "4"
Exit Select
Case "W"
PassSave(i) = "5"
Exit Select
Case "$"
PassSave(i) = "6"
Exit Select
Case "*"
PassSave(i) = "7"
Exit Select
Case "~"
PassSave(i) = "8"
Exit Select
Case "!"
PassSave(i) = "9"
Exit Select
End Select
i = i + 1
Loop
Select Case Tool
Case 1
StrDecodeh = (PassSave(0))
Exit Select
Case 2
StrDecodeh = (PassSave(1) & PassSave(0))
Exit Select
Case 3
StrDecodeh = (PassSave(2) & PassSave(1) & PassSave(0))
Exit Select
Case 4
StrDecodeh = (PassSave(3) & PassSave(2) & PassSave(1) & PassSave(0))
Exit Select
Case 5
StrDecodeh = (PassSave(4) & PassSave(3) & PassSave(2) & PassSave(1) & PassSave(0))
Exit Select
Case 6
StrDecodeh = (PassSave(5) & PassSave(4) & PassSave(3) & PassSave(2) & PassSave(1) & PassSave(0))
Exit Select
Case 7
StrDecodeh = (PassSave(6) & PassSave(5) & PassSave(4) & PassSave(3) & PassSave(2) & PassSave(1) & PassSave(0))
Exit Select
Case 8
StrDecodeh = (PassSave(7) & PassSave(6) & PassSave(5) & PassSave(4) & PassSave(3) & PassSave(2) & PassSave(1) & PassSave(0))
Exit Select
Case 9
StrDecodeh = (PassSave(8) & PassSave(7) & PassSave(6) & PassSave(5) & PassSave(4) & PassSave(3) & PassSave(2) & PassSave(1) & PassSave(0))
Exit Select
Case 10
StrDecodeh = (PassSave(9) & PassSave(8) & PassSave(7) & PassSave(6) & PassSave(5) & PassSave(4) & PassSave(3) & PassSave(2) & PassSave(1) & PassSave(0))
Exit Select

End Select
DeCoder.DeCode_Shodeh = StrDecodeh
End Function

nokhodsiah2001
یک شنبه 29 دی 1387, 15:22 عصر
البته این نمونه رو من برای آزمایش موضوع برات ساختم بقیش با خودت

parsehvb
یک شنبه 29 دی 1387, 17:11 عصر
nokhodsiah2001 (http://www.barnamenevis.org/forum/member.php?u=38035) عزیز با قدر دانی از جوابتون و وقتی که گذاشتید چند نکته را یادآوری می کنم
این روشی که شما گذاشتید فکر کنم برای برنامه های کوچک خانگی فقط به درد بخوره زیرا در برنامه های بزرگ به این ترتیب برای هر نوع فیلدی یا داده ای بایستی از یک نوع روش رمزنگاری استفاده کرد که این برای برنامه نویس قدری پر زحمت و غیر قابل اجرا می شود با این حال روشی که دوست عزیزمون آقای mostafaaa نوشتند عملی تر و اجرائی تر است و نیاز به کار پیچیده ای هم نداشته و امنیت آن نیز بسیار بیشتر از این روش می باشد

#target
یک شنبه 29 دی 1387, 17:54 عصر
برنامه Secure Text v1.6 حتما کمکت می کنه
Http://securetext.persiangig.ir

mostafaaa
یک شنبه 29 دی 1387, 18:11 عصر
ممنون از شما mostafaaa (http://barnamenevis.org/forum/member.php?u=53462)
با استفاده از کدهای بالا چطور میتونم مثلا کلمه salam رو Encrypt کنم؟
سلام دوست من
همونطور که میدونید الگوریتم رمزنگاری RSA یک نوع الگرویتم رمزنگاری بر پایه Public key هستش به این معنی که ما برای رمز کردن اطلاعاتمون از یک کلید عمومی استفاده میکنیم و برای رمزگشایی از یک کلید خصوصی و همین امر امنیت اینگونه از الگوریتمها رو بسیار بالا برده .
چون منطق این گونه از الگوریتمها یک منطق عددی و ریاضی برای رمز کردن یک رشته اون را باید به صورت رشته ای از Byte ها درش بیاریم . به مثال زیر توجه کنید(البته این فقط کد Encrypt کردنه و Decrypt کردن هم دقیقا برعکس همین کار که اگه این رو بفهمید برعکسش رو هم میتونید به را حتی خودتون انجام بدید):

Imports System.Security.Cryptography
Imports System.Text
Module Module1
Private CRSA As RSA
Private PrivateKey As RSAParameters
Dim PublicKey As RSAParameters
Sub Main()
CRSA = New RSACryptoServiceProvider
Console.WriteLine("Generate Private Key...")
PrivateKey = CRSA.ExportParameters(True)
Console.WriteLine()
Console.WriteLine("Generate Public Key...")
PublicKey = CRSA.ExportParameters(False)
Console.WriteLine()
Dim DataToEncrypt() As Byte = Encoding.ASCII.GetBytes("Sallam")
Console.WriteLine("Encrypting Data... ")
Dim EncryptedData() As Byte = Encrypt(PublicKey, DataToEncrypt)
Console.WriteLine("Encryptions successful")
End Sub

Public Function Encrypt(ByVal Parameters As RSAParameters, ByVal DataToEcrypt() As Byte) As Byte()
Dim ERSA As RSACryptoServiceProvider = RSA.Create
ERSA.ImportParameters(Parameters)
Return ERSA.Encrypt(DataToEcrypt, True)
End Function

Public Function Decrypt(ByVal Parameters As RSAParameters, ByVal DataToDecrypt() As Byte) As Byte()
Dim DRSA As RSACryptoServiceProvider = RSA.Create
DRSA.ImportParameters(Parameters)
Return DRSA.Decrypt(DataToDecrypt, True)
End Function
End Module
موضوعی مهمی رو که باید توجه داشته باشید اینه که کلید عمومی و خصوصی را باید از روی یه instance از کلاس RSA درست کنید و اگه اینجور نباشه شما قادر نیستید تا اطلاعاتتون رو دوباره Decrypt کنید.
در آخر اگه بد توضیح دادم عضر میخوام چون مطالب در مورد رمزنگاری زیاده و نمیدونم کدوم قسمتش رو بگم که مطلب دقیق براتون جا بیفته.
یا علی

mostafaaa
جمعه 11 بهمن 1387, 19:58 عصر
سلام دوستان
خوب گویا با استفاده از کدهای بالا مشکل دوستمون حل نشده. بنابراین من یه کلاس ساده نوشتم که با استفاده از اون به راحتی میتونید یه متن را Encrypt و Decrypt کنید :

Imports System.IO
Imports System.Text
Imports System.Security.Cryptography
Public Class Encryptor
Private RJ As Rijndael = Rijndael.Create
Private MD As New MD5CryptoServiceProvider
Private Function Md5Hash(ByVal Value As String) As Byte()
Return MD.ComputeHash(ASCIIEncoding.ASCII.GetBytes(Value) )
End Function
Public Function EncryptText(ByVal TextToEncrypt As String, ByVal Key As String) As String
RJ.Key = Md5Hash(Key)
RJ.Mode = CipherMode.ECB
Dim ToEncrypt As Byte() = Encoding.ASCII.GetBytes(TextToEncrypt)
Return Convert.ToBase64String(RJ.CreateEncryptor().Transf ormFinalBlock(ToEncrypt, 0, ToEncrypt.Length))
End Function
Public Function DecryptText(ByVal EncryptedText As String, ByVal Key As String) As String
Try
RJ.Key = Md5Hash(Key)
RJ.Mode = CipherMode.ECB
Dim ToDecrypt As Byte() = Convert.FromBase64String(EncryptedText)
Return ASCIIEncoding.ASCII.GetString(RJ.CreateDecryptor() .TransformFinalBlock(ToDecrypt, 0, ToDecrypt.Length))
Catch ex As Exception
MessageBox.Show("Invalid Key", "Decryption Failed", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
Return Nothing
End Try
End Function
End Class


پی نوشت : توی این کلاس از یکی از الگوریتمهای کلید متقارن به نام Rijndael که یک الگوریتم قدرتمند هست استفاده کردم ، امیدوارم مشکلتون با این حل بشه.
یا علی

Netsky
شنبه 12 بهمن 1387, 11:10 صبح
سلام . خیلی ممنون از کمک دوستان . اگه لطف کنید و یه سورس قرار بدید فکر کنم بهتر باشه .
البته اگه براتون زحمتی نیست .
با تشکر از همه شما دوستان عزیز ...................

mostafaaa
شنبه 12 بهمن 1387, 11:50 صبح
سلام دوست من
پس این که من گذاشتم چیه ؟؟؟؟؟؟!:چشمک:
این کلاس که دیگه هلو برو تو گلویه !!
یه نمونه ازش میگیری و با استفاده از دوتا متدی که داره و یه کلید(که البته میتونه هر چی باشه) رشته ها رو کد و دیکد میکنی ، مثلا
کد کردن :

Dim Encrypt As New Encryptor
MsgBox(Encrypt.EncryptText("Hello world", "Anything"))که خروجی زیر رو خواهیم داشت :

Iqp5jIimx0Iquqe5dWEKLA==حالا اگه همین خروجی رو به عنوان متن رمز شده و با همون کلید به متد DecryptText بدی :

Dim Decrypt As New Encryptor
MsgBox(Decrypt.DecryptText("Iqp5jIimx0Iquqe5dWEKLA==", "Anything"))خروجیمون Hello wold خواهد بود .
یا علی

masoud.t123
شنبه 12 بهمن 1387, 13:14 عصر
با عرض سلام خدمت آقا mostafaaa (http://barnamenevis.org/forum/member.php?u=53462)
-بنده می خواستم با System.Security.Cryptography بیشتر آشنا شوم مقاله آموزشی فارسی یا انگلیسی در این باره سراغ ندارید؟
DES-و AES و 3DES و RC4 و MD5 و SHA1 - 256 -384 -512 جز همین فضا نام هستند؟
-hash یعنی چه؟
با تشکر فراوان از شما

Netsky
شنبه 12 بهمن 1387, 13:23 عصر
با تشکر از همه دوستان .......................

shask00l
شنبه 12 بهمن 1387, 16:05 عصر
http://www.codeproject.com/KB/recipes/StoringPasswords.aspx
http://www.codeproject.com/KB/security/Crypto.aspx

mostafaaa
شنبه 12 بهمن 1387, 17:23 عصر
با عرض سلام خدمت آقا mostafaaa (http://barnamenevis.org/forum/member.php?u=53462)
-بنده می خواستم با System.Security.Cryptography بیشتر آشنا شوم مقاله آموزشی فارسی یا انگلیسی در این باره سراغ ندارید؟
DES-و AES و 3DES و RC4 و MD5 و SHA1 - 256 -384 -512 جز همین فضا نام هستند؟
-hash یعنی چه؟
با تشکر فراوان از شما
سلام بله تقریبا تمامی اینها که نام بردید در همین NameSpace وجود دارند.
در مورد مقاله هم اگه توی اینترنت یه جستجوی کوچیک بکنی کلی مطلب مفید پیدامیکنی .
اگه دنبال e.book هم میگردید پیشنهاد میکنم اول از این (http://www.scribd.com) سایت شروع کنید.
یا علی