PDA

View Full Version : سوال: درج پسورد در بانك اطلاعاتي به صورت نامفهوم و رمز



mahbobehshab
چهارشنبه 22 دی 1389, 18:27 عصر
سلام دوستان
ميخوام هنگام تعريف كاربر پسوردي كه كاربر وارد ميكنددر بانك اطلاعاتي پسورد به گونه اي درج شود كه اگر فردي وارد بانك اطلاعاتي شد نتواند آن پسورد را بخواند و به راحتي وارد نرم افزار شود.

omid-vbAuto
چهارشنبه 22 دی 1389, 18:46 عصر
سلام دوستان
ميخوام هنگام تعريف كاربر پسوردي كه كاربر وارد ميكنددر بانك اطلاعاتي پسورد به گونه اي درج شود كه اگر فردي وارد بانك اطلاعاتي شد نتواند آن پسورد را بخواند و به راحتي وارد نرم افزار شود.

از قابلیت MD5 استفاده کنید.

mahbobehshab
چهارشنبه 22 دی 1389, 19:04 عصر
از قابلیت MD5 استفاده کنید.

منظورتونو نفهميدم اصلا اسمشم تاحالا نشنيدم.اگه ميشه يك نمونه كد يا پروژه واسم بذاريد.ممنون.خيلي ضروريه.

Navid Asadi
چهارشنبه 22 دی 1389, 20:17 عصر
چند راه برای این کار هست :
1.نوع فیلد رو password قرار بدید (مطمئن نیست)
2.هش کردن password
3.ِاستفاده از Xor
4.استفاده از هر 3

mahbobehshab
چهارشنبه 22 دی 1389, 20:29 عصر
منظورتونو نفهميدم اصلا اسمشم تاحالا نشنيدم.اگه ميشه يك نمونه كد يا پروژه واسم بذاريد.ممنون.خيلي ضروريه.
من با هيچكدوم از اين سه مورد كار نكردم توروخدا كدشو برام بذارين يا نمونه پروژه.ممنون.

محسن شامحمدی
چهارشنبه 22 دی 1389, 20:33 عصر
سلام دوستان
ميخوام هنگام تعريف كاربر پسوردي كه كاربر وارد ميكنددر بانك اطلاعاتي پسورد به گونه اي درج شود كه اگر فردي وارد بانك اطلاعاتي شد نتواند آن پسورد را بخواند و به راحتي وارد نرم افزار شود.
فقط کافیه به جای اینکه متن شفاف پسورد را در بانک ذخیره کنی،کد شده آن را ذخیره کنی.
به صورت زیر:
TextBox1.Text.GetHashCode()

حالا هر موقع که می خواین پسورد رو مقایسه کنید رشته ای که از کاربر می گیرین رو به hashcode تبدیل کنید و با مقدار توی دیتابیس مقایسه کنید.
اگر یک یبودن پسورد رو درست زده.

mahbobehshab
جمعه 24 دی 1389, 10:45 صبح
فقط کافیه به جای اینکه متن شفاف پسورد را در بانک ذخیره کنی،کد شده آن را ذخیره کنی.
به صورت زیر:
TextBox1.Text.GetHashCode()

حالا هر موقع که می خواین پسورد رو مقایسه کنید رشته ای که از کاربر می گیرین رو به hashcode تبدیل کنید و با مقدار توی دیتابیس مقایسه کنید.
اگر یک یبودن پسورد رو درست زده.

من اون جوري كه شما گفتيد پسورد رو ذخيره كردم ولي نميدونم هنگامي كه ميخوام پسورد رو مقايسه كنم بايد چيكاركنم.چون وقتي كه كاربر با همون پسوردي كه تعريف كرده بود ميخواست وارد نرم افزار بشه نتونست وبايد همون هش كد رو وارد ميكرد.لطفا با كد راهنماييم كنيد.چه جوري پسورد رو مقايسه كنم؟

محسن شامحمدی
جمعه 24 دی 1389, 12:24 عصر
حالا هر موقع که می خواین پسورد رو مقایسه کنید رشته ای که از کاربر می گیرین رو به hashcode تبدیل کنید و با مقدار توی دیتابیس مقایسه کنید.
اگر یکی بودن پسورد رو درست زده.
مگر اینو نخوندید؟
مثلا:

dim t=getpasswordfromdatabse()
if textbox1.text.gethashcode()=t then
'password is correct
else
'password not valid
end if
دقت نمی کنی ها.

mahbobehshab
جمعه 24 دی 1389, 13:01 عصر
مگر اینو نخوندید؟
مثلا:

dim t=getpasswordfromdatabse()
if textbox1.text.gethashcode()=t then
'password is correct
else
'password not valid
end if
دقت نمی کنی ها.

نميدونم شما منظور من رو نفهميدين يا من نفهميدم؟من ميخوام كه اگر مثلا كاربر براي پسوردش 123 رو انتخاب ميكنه و اين پسورد با هش تبديل به مثلا 489651 ميشه كاربر وقتي كه ميخواد وارد برنامه بشه با همون 123 وارد بشه نه با هش كد!

محسن شامحمدی
جمعه 24 دی 1389, 13:09 عصر
كاربر وقتي كه ميخواد وارد برنامه بشه با همون 123 وارد بشه نه با هش كد!
ببین خواهر من
شما باید از کاربر 123 رو بگیری و خودت تو برنامت تبدیلش کنی به هش کد.

textbox1.text.gethashcode()
حالا این هش کد رو با هش کدی که توی دیتابیس هست مقایسه کن.

dim t=getpasswordfromdatabse()
if textbox1.text.gethashcode()=t then
اگر یکی بودن یعنی هش کد کاربر با هش کد دیتابیس یکی بود، معلومه که هر دو مقدار 123 اند.اون موقع
'password is correct
در غیر اینصورت
'password is invalid
البته کد گویای همه چیز هست.
اصلا اگر بازم متوجه نشدین بگید یک برنامه کوچولو واستون درست می کنم.

mansourii
جمعه 24 دی 1389, 14:39 عصر
این بحث رو اگه همین طور مبتدیانه می خواید بیان کنید حرف ها ی دوستان صادفه!
اما اگه کارتون حرفه ایه به هیچ عنوان این کار جایز نیست!
بچه ها کارشناسی ارشد رشته نرم افزار کتابی در رابطه با Integrity (جامعیت) Transaction (تراکنش) و امنیت پایگاه داده ها میخونن که در یک کتاب بنام Interaction Security Database نام نویسنده یوید پاورز ( کتاب رو میتونید از سایت Amazon.co.uk سفارش بدید!** (البته اگه کارت سبز دارید میتونید محصولات رو از این سایت خریداری کنید)**) این کتاب امنیت پایگاه دادها در Oracel رو بصورت خیلی حرفه ای بیان میکنه.

mahbobehshab
چهارشنبه 29 دی 1389, 11:37 صبح
این بحث رو اگه همین طور مبتدیانه می خواید بیان کنید حرف ها ی دوستان صادفه!
اما اگه کارتون حرفه ایه به هیچ عنوان این کار جایز نیست!
بچه ها کارشناسی ارشد رشته نرم افزار کتابی در رابطه با Integrity (جامعیت) Transaction (تراکنش) و امنیت پایگاه داده ها میخونن که در یک کتاب بنام Interaction Security Database نام نویسنده یوید پاورز ( کتاب رو میتونید از سایت Amazon.co.uk سفارش بدید!** (البته اگه کارت سبز دارید میتونید محصولات رو از این سایت خریداری کنید)**) این کتاب امنیت پایگاه دادها در Oracel رو بصورت خیلی حرفه ای بیان میکنه.

من ابتدابا پسورد رو تبدیل به هش میکنم.حالا میخوام با دستور سلکت درست بودن پسورد رو شناسایی کنم و وارد نرم افزار بشم.
دستورم هم به این شکله:
select * from user1 where password=txt1.text and username=txt2.text
حالا من این دستورو چه جوری با هش کد مقایسه کنم.من وقتی میخوام وارد نرم افزار بشم با دستور سلکت وارد میشم.
اصلا اگه میشه یه نمونه برنامه بذارید.ممنون میشم.

محسن شامحمدی
چهارشنبه 29 دی 1389, 17:22 عصر
فقط كافيه اين كد رو عوض كنيد.
select * from user1 where password=txt1.text and username=txt2.text

به جاش بذاريد

select * from user1 where password=txt1.text.gethashcode() and username=txt2.text.gethashcode()و بطور كلي هر جا كه متن تكست باكس رو مقايسه مي كردين حالا بايد هش شده متن تكست باكس رو مقايسه كنيد.


اصلا اگه میشه یه نمونه برنامه بذارید.ممنون میشم.شرمنده الان تو كافي نتم (Vsندارم) وگرنه حتما.

hossin.esm
پنج شنبه 30 دی 1389, 09:40 صبح
http://www.p2p.dotnetsource.com/Default.aspx?g=posts&t=379

mahbobehshab
پنج شنبه 30 دی 1389, 10:07 صبح
http://www.p2p.dotnetsource.com/Default.aspx?g=posts&t=379

سلام .من اون كدي كه در بالا ذكر كرديد در برنامه م نوشتم ولي خطا ميداد!چيكار كنم؟:عصبانی++:
يعني اين كد:
select * from user1 where password=txt1.text.gethashcode() and username=txt2.text.gethashcode()

چيكار كنم خطا ميداد؟

saina2006
جمعه 01 بهمن 1389, 02:06 صبح
شما باید از کلاس System.Security.Cryptography توی .NET استفاده کنید
این نمونه کد سایت MSDN برای MD5 هست. البته SHA1 از لحاظ امنیت بالاتره اما با سیستمهای امروزی تفاوتی بینشون نیست


Imports System
Imports System.Security.Cryptography
Imports System.Text

Module Example

' Hash an input string and return the hash as
' a 32 character hexadecimal string.
Function getMd5Hash(ByVal input As String) As String
' Create a new instance of the MD5 object.
Dim md5Hasher As MD5 = MD5.Create()

' Convert the input string to a byte array and compute the hash.
Dim data As Byte() = md5Hasher.ComputeHash(Encoding.Default.GetBytes(in put))

' Create a new Stringbuilder to collect the bytes
' and create a string.
Dim sBuilder As New StringBuilder()

' Loop through each byte of the hashed data
' and format each one as a hexadecimal string.
Dim i As Integer
For i = 0 To data.Length - 1
sBuilder.Append(data(i).ToString("x2"))
Next i

' Return the hexadecimal string.
Return sBuilder.ToString()

End Function


' Verify a hash against a string.
Function verifyMd5Hash(ByVal input As String, ByVal hash As String) As Boolean
' Hash the input.
Dim hashOfInput As String = getMd5Hash(input)

' Create a StringComparer an compare the hashes.
Dim comparer As StringComparer = StringComparer.OrdinalIgnoreCase

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

End Function



Sub Main()
Dim source As String = "Hello World!"

Dim hash As String = getMd5Hash(source)

Console.WriteLine("The MD5 hash of " + source + " is: " + hash + ".")

Console.WriteLine("Verifying the hash...")

If verifyMd5Hash(source, hash) Then
Console.WriteLine("The hashes are the same.")
Else
Console.WriteLine("The hashes are not same.")
End If

End Sub
End Module
' This code example produces the following output:
'
' The MD5 hash of Hello World! is: ed076287532e86365e841e92bfc50d8c.
' Verifying the hash...
' The hashes are the same.


اینم لینک اصل مطلب: http://msdn.microsoft.com/en-us/library/system.security.cryptography.md5.aspx

محسن شامحمدی
جمعه 01 بهمن 1389, 15:55 عصر
سلام .من اون كدي كه در بالا ذكر كرديد در برنامه م نوشتم ولي خطا ميداد!چيكار كنم؟:عصبانی++:
يعني اين كد:
select * from user1 where password=txt1.text.gethashcode() and username=txt2.text.gethashcode()

چيكار كنم خطا ميداد؟
وای امان از دست شما
این فقط شبه کد بود.اصلش می شه این


"select * from user1 where password='" & txt1.text.gethashcode() & "' and username='" & txt2.text.gethashcode()

mahbobehshab
دوشنبه 04 بهمن 1389, 19:40 عصر
وای امان از دست شما
این فقط شبه کد بود.اصلش می شه این


"select * from user1 where password='" & txt1.text.gethashcode() & "' and username='" & txt2.text.gethashcode()

ببخشید دوست عزیز شما خیلی زود از کوره درمیرید.من عین همین کد رو قبلا گذاشتم.چیکار کنم خوب خطا میده؟دست من که نیست!

mahbobehshab
دوشنبه 04 بهمن 1389, 20:03 عصر
شما باید از کلاس System.Security.Cryptography توی .NET استفاده کنید
این نمونه کد سایت MSDN برای MD5 هست. البته SHA1 از لحاظ امنیت بالاتره اما با سیستمهای امروزی تفاوتی بینشون نیست


Imports System
Imports System.Security.Cryptography
Imports System.Text

Module Example

' Hash an input string and return the hash as
' a 32 character hexadecimal string.
Function getMd5Hash(ByVal input As String) As String
' Create a new instance of the MD5 object.
Dim md5Hasher As MD5 = MD5.Create()

' Convert the input string to a byte array and compute the hash.
Dim data As Byte() = md5Hasher.ComputeHash(Encoding.Default.GetBytes(in put))

' Create a new Stringbuilder to collect the bytes
' and create a string.
Dim sBuilder As New StringBuilder()

' Loop through each byte of the hashed data
' and format each one as a hexadecimal string.
Dim i As Integer
For i = 0 To data.Length - 1
sBuilder.Append(data(i).ToString("x2"))
Next i

' Return the hexadecimal string.
Return sBuilder.ToString()

End Function


' Verify a hash against a string.
Function verifyMd5Hash(ByVal input As String, ByVal hash As String) As Boolean
' Hash the input.
Dim hashOfInput As String = getMd5Hash(input)

' Create a StringComparer an compare the hashes.
Dim comparer As StringComparer = StringComparer.OrdinalIgnoreCase

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

End Function



Sub Main()
Dim source As String = "Hello World!"

Dim hash As String = getMd5Hash(source)

Console.WriteLine("The MD5 hash of " + source + " is: " + hash + ".")

Console.WriteLine("Verifying the hash...")

If verifyMd5Hash(source, hash) Then
Console.WriteLine("The hashes are the same.")
Else
Console.WriteLine("The hashes are not same.")
End If

End Sub
End Module
' This code example produces the following output:
'
' The MD5 hash of Hello World! is: ed076287532e86365e841e92bfc50d8c.
' Verifying the hash...
' The hashes are the same.
اینم لینک اصل مطلب: http://msdn.microsoft.com/en-us/library/system.security.cryptography.md5.aspx

من از این کد هرچی می خونم چیزی نمی فهمم که کجا پسوورد رو از بانک می گیره ورمز می کنه و چه جوری توبانک درجش میکنه و چه جوری با همون پسورد وارد برنامه میشه.لطفا اگه نمونه برنامه ای دارید که کاربررو تعریف میکنه و همون کاربر میتونه واردبرنامه بشه برام بذارید.خدا خیرت بده ننه.اگه میشه زودتر.

محسن شامحمدی
پنج شنبه 07 بهمن 1389, 20:13 عصر
ببخشید دوست عزیز شما خیلی زود از کوره درمیرید.من عین همین کد رو قبلا گذاشتم.چیکار کنم خوب خطا میده؟دست من که نیست! خب چه خطایی می ده؟
ببینید اسم جدولتون و اسم فیلدهاتون همونیه که من گذاشتم.


من از این کد هرچی می خونم چیزی نمی فهمم که کجا پسوورد رو از بانک می گیره ورمز می کنه و چه جوری توبانک درجش میکنه و چه جوری با همون پسورد وارد برنامه میشه:قهقهه:
ببین مادر جان
این کد فقط طریقه کدکردن با استفاده از روش های
hash
md5
رو گفته و در آخرش هم به شما یاد داده که هش مقدار وارد شده رو با مقدار ذخیره شده مقایسه کنید.
فکر کنم مشکل شما توی بازکردن بانک و خواندن و ذخیره اطلاعات در بانک باشه نه مقایسه hash مقدار ورودی با مقدار داخل دیتابیس:شیطان:

محسن شامحمدی
پنج شنبه 07 بهمن 1389, 20:25 عصر
بفرمایید یک دونه sample درست کردم که دیگه نگین متوجه شدم.