PDA

View Full Version : hashکردن password ها در database



ssetare
سه شنبه 10 آبان 1384, 09:32 صبح
سلام
من میخوام از تابع MD5 برای hash کردن password ها استفاده کنم ولی نمی دونم وقتی password ,
hash شد در database چه جوری با password ها مقایسه کنم؟باید اونا هم hash بشن؟چه جوری این کارو انجام بدم؟؟؟؟؟؟

mehrdotnet
سه شنبه 10 آبان 1384, 11:15 صبح
منظورتون زمان لاگین کردن کاربره؟
اگه منظورتون اینه باید با همون تابع PWD وارد شده را Hash کرده و با PWD توی DB مقایسه کنین.

ssetare
سه شنبه 10 آبان 1384, 12:26 عصر
بله منظورم موقع login شدنه.
یعنی password های داخل db نیاز به hash شدن ندارن؟پس چه طوری pass ی که توسط کاربر فرستاده شده و hash شده با
pass ی که داخل db و hash نشده مقایسه میشه؟

Identifier
سه شنبه 10 آبان 1384, 12:31 عصر
شما پسورد hash شده توی db فرار میدین بعد هنگامی که ماربر ارد میشه password رو که کاربر وارد کرده هش میکنید اگر مقدار هش شده کنونی و اونی که توی دیتابیس هست برابر بود معلومه که کابر درست رمز رو وارد کرده

javad3151
چهارشنبه 11 آبان 1384, 07:54 صبح
سلام
فرض بر اینکه شما پسورد کاربر رو هش کرده و در دیتابیس ذخیره کردید و حالا می خواهید یک فرم لاگین بسازید:


<%@ Import Namespace="System.Security.Cryptography" %>
<%@ Import Namespace="System.Text" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.SqlClient" %>
<script runat="server" language="VB">
Sub Login(sender as Object, e as EventArgs)
'1. Create a connection
Const strConnString as String = "connection string"
Dim objConn as New SqlConnection(strConnString)

'2. Create a command object for the query
Dim strSQL as String = "SELECT COUNT(*) FROM UserAccount " & _
"WHERE Username=@Username AND Password=@Password"
Dim objCmd as New SqlCommand(strSQL, objConn)

'3. Create parameters
Dim paramUsername as SqlParameter
paramUsername = New SqlParameter("@Username", SqlDbType.VarChar, 25)
paramUsername.Value = txtUsername.Text
objCmd.Parameters.Add(paramUsername)


'Encrypt the password
Dim md5Hasher as New MD5CryptoServiceProvider()

Dim hashedDataBytes as Byte()
Dim encoder as New UTF8Encoding()

hashedDataBytes = md5Hasher.ComputeHash(encoder.GetBytes(txtPwd.Text ))

Dim paramPwd as SqlParameter
paramPwd = New SqlParameter("@Password", SqlDbType.Binary, 16)
paramPwd.Value = hashedDataBytes
objCmd.Parameters.Add(paramPwd)


'Insert the records into the database
objConn.Open()
Dim iResults as Integer = objCmd.ExecuteScalar()
objConn.Close()

If iResults = 1 then
'The user was found in the DB
Else
'The user was not found in the DB
End If
End Sub
</script>

<form runat="server">
<h1>Login</h1>
Username: <asp:TextBox runat="server" id="txtUsername" />
<br />Password:
<asp:TextBox runat="server" id="txtPwd" TextMode="Password" />
<p><asp:Button runat="server" Text="Login" OnClick="Login" />
</form>

ssetare
چهارشنبه 11 آبان 1384, 12:59 عصر
سلام
خیلی ممنون از راهنماییتون ولی مشکل من اینکه نمیدونم چه طوری پسوردهای داخلdb,هش میشن
و کجا این کار انجام میشه؟با c#

shahroozj
چهارشنبه 11 آبان 1384, 16:10 عصر
زمانی که دارید یک کاربر را تعریف می کنید password ان را به صورت hash شده در دیتا بیس ذخیره کنید یعنی به کمک خود aaplication نه با استفاده از Enterprise SQL Server

mehrdotnet
پنج شنبه 12 آبان 1384, 12:06 عصر
ببین یه راه راحت و نسبتاً امن اینه که :
شما کاربر رو از طریق خود برنامه همیشه تعریف کنین و زمان تعریف کاربر به جای اینکه خود PWD را در DB ذخیره کنین GetHashCode اون را توی DB قرار بدین
حالا زمان لاگین وقتی UID و PWD کاربر رو گرفتین ، PWD گرفته شده رو هم GetHashCodeش رو بگیرید و با اونی که توی DB ذخیره شده مقایسه کنین.
در بسیاری موارد شما با بقیه توابع Hash هم باید همین طور رفتار کنین چون بعضاً کد بازگشت ندارند.

mehrdotnet
پنج شنبه 12 آبان 1384, 12:07 عصر
اگه باز هم لازمه یه مثال بزارم ؟

ssetare
جمعه 13 آبان 1384, 11:38 صبح
mamnon misham age 1 mesal bezarin (albate bebakhshid aaa faghat barae ghesamat hash kardane PWD dakhele db)

ssetare
شنبه 14 آبان 1384, 10:05 صبح
مشکلم حل شد .خیلی ممنون از راهنماییهاتون

بابک رجاور
دوشنبه 16 آبان 1384, 02:05 صبح
من اینجا رو اتفاقی دیدیم ولی جواب سوال شما اینه که من می نویسم امیدوارم بدردتون بخوره البته بقیه کاملا درست نوشتن ولی روش Hash passord در دات نت دارای کلاس System.Web.Security.FormsAuthentication است

روش sha1
System.Web.Security.FormsAuthentication.HashPasswo rdForStoringInConfigFile(yourData, "sha1")

روش MD5
System.Web.Security.FormsAuthentication.HashPasswo rdForStoringInConfigFile(yourData, "MDF")

داخل MSDN این کلمه رو جستجو کنید اطلاعاتکاملی بهتون میده

mehrdotnet
دوشنبه 16 آبان 1384, 12:56 عصر
ممنون جالبه !
الان یادم اومد که توی کتاب آموزش ASP.Net مربوط به MCSD این مطلب رو دیده بودم!

بابک رجاور
پنج شنبه 19 آبان 1384, 18:18 عصر
سلام همانطور که mehrdotnet میگه باید از application استفاده کنید!
روش:
System.Web.Security.FormsAuthentication.HashPasswo rdForStoringInConfigFile(password,hashtype)
password:همان کلمه عبور
hashtype:یک از دو عبارت sha1 یا md5
من در تمام application های خودم از انها استفاده می کنم ولی چند تا ایراد بزرگ داره که حتما برای شما می فرستم....

ssetare
شنبه 21 آبان 1384, 09:55 صبح
سلا م مرسی از جوابتون
این ایراد های بزرگ چیه؟

hamhik
سه شنبه 23 آبان 1385, 12:31 عصر
با سلام و عرض خسته نباشید .
من اون کدی رو که جناب javad3151 نوشته بودند را وارد کردم و برای این که ببینم این کد درست کار می کنه یا نه؟ اومدم و به جای خط کامنت
'The user was found in the DB
این خط را نوشتم
textbox1.text="exist"
و به جای خط کامنت
'The user was not found in the DB
این خط را وارد نمودم
textbox1.text="not exist"
اما هنگامی که برنامه را اجرا می کنم با این که یک همچین username و passwordی در db من وجود دارد اما not exist فقط می دهد (چه باشد یا چه نباشد)و مقدار iresults هم که بررسی می کنم فقط مقدار صفر را بر می گرداند ناگفته نماند که فیلد مر بوط به پسورد هش شده(البته من از روش پسورد گذاری MD5 استفاده کردم) در بانک اطلاعاتی از نوع binary و فیلد نام کاربری از نوع char می باشد.اگر من بخوام فیلد مربوط به پسورد رو از نوع CHAR بزارم که مشکلی پیش نمی یاد؟؟؟؟؟؟؟؟؟؟؟؟؟
ممنون می شم کمکم کنید.

javad3151
چهارشنبه 24 آبان 1385, 07:38 صبح
فیلد پسورد حتما باید از نوع باینری باشه