PDA

View Full Version : اینکریپت و دیکریپت



mehdiDER_5
دوشنبه 19 آذر 1386, 07:10 صبح
با سلام
من میخواستم اطلاعاتی در مورد این دو تا موضوع بدست آورم میدانم که برای پسورد گذاری استفاده میشود اما نمدانم چطور و چگونه جستجو کردم در سایت چیزی دستگیرم نشد ممنون میشوم راهنمائی فرمائید
با تشکر

ir_programmer
دوشنبه 19 آذر 1386, 07:58 صبح
دوست عزیز من در این پست یک راه حل با مثال گذاشتم.
کاملا هم جواب میده.
http://barnamenevis.org/forum/showthread.php?t=84283

amirsajjadi
دوشنبه 19 آذر 1386, 09:19 صبح
اگه میخواین توی حافظه ی اصلی (ram) پسورد رو ذخیره کنید یا بهتر بگم اگه میخواین توی یک متغیر ذخیره کنید اون متغیر رو از نوع SecurString تعریف کنید به این صورت :

طریقه ی تعریف متغیر


Dim Pass As New Security.SecureString

زیر برنامه خواندن از متغیر محافظت شده

Private Function ReadFromSecurityString (ByVal ss As Security.SecureString) As String
If ss.Length > 0 Then
Dim b As IntPtr = System.Runtime.InteropServices.Marshal.SecureStrin gToGlobalAllocUnicode(ss)
Return System.Runtime.InteropServices.Marshal.PtrToString Uni(b)
Else
Return""
End If
End Function

زیر برنامه نوشتن در متغیر محافظت شده

Private Sub SetToSecurityString(ByVal strg AsString, ByRef ss As Security.SecureString)
ss.Clear()
If strg <> "" Then
For Each c As Char In strg
ss.AppendChar(c)
Next
Else
ss.AppendChar("")
End If
End Sub

ولی اگه میخواین توی فایل ذخیره کنید ، این برنامه کمکتون میکنه :

ابتدا باید کلید انکریپت رو تعریف کنید ، بع این صورت (اعداد آرایه را به سلیقه ی خودتان میتونید تغییر بدید) :

Dim KEY() AsByte = NewByte() {19, 115, 1, 215, 157, 203, 160, 35, 185, 199, 120, 103, 155, 1, 80, 93, 22, 17, 105, 119, 55, 81, 215, 29, 240, 230, 147, 16, 12, 15, 36, 150}
Dim IV() AsByte = NewByte() {174, 130, 120, 100, 80, 206, 99, 109, 153, 0, 101, 8, 70, 130, 106, 251}

زیر برنامه انکریپت کردن داده ها و ذخیره ی اونها توی فایل

Public Sub Encrypt_Data(ByVal address_file As String, ByVal info As String)
Try
If address_file <> ""Then
Dim fStream As IO.FileStream = IO.File.Open(address_file, IO.FileMode.Create)
Dim RijndaelAlg As System.Security.Cryptography.Rijndael = System.Security.Cryptography.Rijndael.Create
Dim cStream As New System.Security.Cryptography.CryptoStream(fStream, _
RijndaelAlg.CreateEncryptor(KEY, IV), _
System.Security.Cryptography.CryptoStreamMode.Writ e)
Dim sWriter As New IO.StreamWriter(cStream)
sWriter.WriteLine(info)
sWriter.Close()
cStream.Close()
fStream.Close()
End If
Catch ex As Exception
End Try
End Sub

زیر برنامه خوندن از فایل انکریپت شده (دیکریپت کردن اطلاعات)

Public Function Decrypt_Data(ByVal address_file As String) As String
Try
If address_file <> "" AndAlso FileIO.FileSystem.FileExists(address_file) = TrueThen
Dim fStream As IO.FileStream = IO.File.Open(address_file, IO.FileMode.Open)
Dim RijndaelAlg As System.Security.Cryptography.Rijndael = System.Security.Cryptography.Rijndael.Create
Dim cStream AsNew System.Security.Cryptography.CryptoStream(fStream, _
RijndaelAlg.CreateDecryptor(KEY, IV), _
System.Security.Cryptography.CryptoStreamMode.Read )
Dim sReader As New IO.StreamReader(cStream)
Dim plainText As String = sReader.ReadToEnd
sReader.Close()
cStream.Close()
fStream.Close()
Return plainText
Else
Return""
End If
Catch ex As Exception
Return""
End Try
End Function

amirsajjadi
دوشنبه 19 آذر 1386, 12:40 عصر
این هم یک برنامه ی دیگه
برای انکریپت کردن

Public Function Crypt_Password(ByVal pass AsString) As String
Dim arr(pass.Length) As String
Dim l, h As Integer
Dim rnds As New Random
Randomize()
l = rnds.Next(1, 254)
h = (l + pass.Length - 1)
For i As Integer = l To h
arr(i - l) = Asc(pass(i - l)) Xor i
Next
arr(UBound(arr)) = l
Return Join(arr, ";")
End Function

برای دیکریپت کردن

Public Function Decrypt_CPassword(ByVal Cpass As String) As String
Dim arr() As String = Split(Cpass, ";")
Dim d(UBound(arr) - 1) As String
For i As Integer = Val(arr(UBound(arr))) To Val(arr(UBound(arr))) + UBound(arr) - 1
d(i - Val(arr(UBound(arr)))) = Chr(arr(i - Val(arr(UBound(arr)))) Xor i)
Next
Return Join(d, "")
End Function

لطفا نظر خودتون رو در مورد این برنامه بگید

ir_programmer
دوشنبه 19 آذر 1386, 13:33 عصر
روشی که من معرفی کردم استاندارد است.
روش دوستمون هم جالبه و استاندارد نیست.

amirsajjadi
دوشنبه 19 آذر 1386, 15:52 عصر
روشی که من معرفی کردم استاندارد است.
روش دوستمون هم جالبه و استاندارد نیست.
روش دوم منظورتون اون پست آخری منه اگه اونه که درسته استاندارد نیست ولی خودتون میدونید که روش های استاندارد امنیت کمتری داره :گیج: ! چون هکرها روش های استاندارد رو هک میکن نه روش های غیر استاندارد رو :لبخند:
حالا خودمونیما روش آخری من هم زیاد غیر استاندارد نیست تویه تمام حالات جواب میده

hamed_bostan
سه شنبه 20 آذر 1386, 09:36 صبح
با سلام . روشای جالبه . کاش دوستان بیشتر در مورد روش های جدید مثل دوستمون امیر خان صحبت میکردن . روش های جدید هم یادگیری رو بالا میبره و طرف میفهمه اصل داستان چیه و هم یه الگوریتم خاص نداره که هکر ها با در اوردن ساختارش بزنن تو حال برنامه نویس

mehdiDER_5
سه شنبه 20 آذر 1386, 10:16 صبح
با سلام و تشکر از دوستان گرامی من در این مورد تازه کارم (پسورد گذاری ) من میخواهم روی فرمم یک username , password را میگذارم که کاربر ابتدا آن username, password را برای خودش تعریف کند و بعد در هنگام ورود با آن login کند حال این کدها را در کجا باید استفاده کرد





















3

ir_programmer
سه شنبه 20 آذر 1386, 10:33 صبح
فکر نکنم کسی بتونه از سد Hash بگذره ها!

mehdiDER_5
سه شنبه 20 آذر 1386, 11:17 صبح
با سلام
منظورتان را نتوجه نشدم من میخواهم یک فرم اولیه طراحی کنم که در آن افراد بتوانند user , pass برای خود تعریف کنند و این user , pass به صورت رمز شده در بانک قرار گیرد طوری که کسی که بانک را باز کرد نتواند متوجه آن شود بعد افراد با آن user , pass به برنامه وارد شوند
حال اگر میشود بگویید این دستورات را در کجای برنامه استفاده کنم

babak23
سه شنبه 20 آذر 1386, 12:30 عصر
با سلام
منظورتان را نتوجه نشدم من میخواهم یک فرم اولیه طراحی کنم که در آن افراد بتوانند user , pass برای خود تعریف کنند و این user , pass به صورت رمز شده در بانک قرار گیرد طوری که کسی که بانک را باز کرد نتواند متوجه آن شود بعد افراد با آن user , pass به برنامه وارد شوند
حال اگر میشود بگویید این دستورات را در کجای برنامه استفاده کنم

منظور دوستمون شما نبودید:لبخند:
به طور کلی:
برای اینکار میتونی یک کلاس یا یک فرم طراحی کنی و قبل از اینکه برنامت لود بشه این کلاس یا فرم را فراخوانی کنی و در این فرم یا کلاس رمز عبور و نام کاربری را گرفته و
مقدار ورودی را که کاربر وارد کرده را با اطلاعات داخل بانک مقایسه کن اگه این اطلاعات با اطلاعات داخل بانک همخوانی داشت که فرم اصلی برنامه را فعال میکنی به غیر اینصورت نه!!!
اگه اطلاعات بیشتر میخواهی جستجو کن چون این مورد نیاز به مطالعه بیشتری داره