PDA

View Full Version : سوال: چگونگی استفاده از md5



marjan_gh
چهارشنبه 03 خرداد 1391, 01:50 صبح
سلام
من باید از هش برای رمز گذاری روی پسوردم استفاده کنم ولی اصلا نمی دونم چه جوری و کجا باید استفاده کنم؟
با سرچهایی که کردم به نظر می رسه یه تابه هستش که توی دات نت وجود داره (اگه اشتباهه بگید)حالا مسئله اینجاست که زمانی که پسورد وارد می شه باید با این تابع رمز دارش کنم بعد بزارمش توی دیتا بیس؟

فرید نجفلو
چهارشنبه 03 خرداد 1391, 11:20 صبح
سلام
دوست عزیز تو تاپیک زیر همین مورد شما رو من گذاشتم رمزنگاری > ذخیره در دیتابیس (در بخش ایجاد کاربر)
برعکسش چون نیز نبود مثال نداره ولی تابعش موجود هست
البته اگه به بخش ذخیره رشته اتصال (http://barnamenevis.org/showthread.php?333713-برنامه-نویسی-پایگاه-داده-به-صورت-گام-به-گام&p=1476221&viewfull=1#post1476221)برید هم رمزنگاری و هم رمز گشایی مثال دارن
تاپیک:
برنامه نویسی پایگاه داده به صورت گام به گام (http://barnamenevis.org/showthread.php?333713-برنامه-نویسی-پایگاه-داده-به-صورت-گام-به-گام/page2)

کدها و مثال :
پست 18 (http://barnamenevis.org/showthread.php?333713-برنامه-نویسی-پایگاه-داده-به-صورت-گام-به-گام&p=1476215&viewfull=1#post1476215)

marjan_gh
سه شنبه 04 مهر 1391, 23:25 عصر
Dim r As Integer
Dim localtable As TBLuser = New TBLuser

localtable.name = txtname.Text
localtable.password = txtpassword.Text
localtable.phone = txtphone.Text
localtable.level = 2
localtable.username = txtusername.Text
localtable.email = txtmail.Text

r = TBLuserLOG.InsertRecord(localtable)

Session("idregisteruser") = localtable.id
Session("username") = localtable.username

If r > 0 Then
lblmessage.Text = "ثبت با موفقیت انجام شد کد رهگیری شما :" + r.ToString
Dim url = "~\default.aspx" + Session("id")
Response.Redirect("url")

Else
lblmessage.Text = "خطا در ثبت"
End If

اگه می شه یه نفر بگه من پسورد این کدرو چه جوری هش کنم به خدابار اولمه
اینیک پروژه 4 لایه و با asp.net وlinq هست
اگه اطلاعات دیگه ای خواستین بفرمایین فقط اصلا وقتی برام نمونده

alimanam
چهارشنبه 05 مهر 1391, 14:50 عصر
با سلام


البته اگه به بخش ذخیره رشته اتصال برید هم رمزنگاری و هم رمز گشایی مثال دارن

دوست عزیز عنوان تاپیک رو یه بار دیگه با کمی دقت بیشتری ببینین ! هش با رمزنگاری و رمزگشایی فرق میکنه . در هش هیچوقت رشته با رشته مقایسه نمیشه بلکه بیت به بیت مقایسه میشه . اگه دقت کرده باشین بیشتر در برنامه های تحت وب از این روش برای اعتبارسنجی کاربران جهت لوگین استفاده میشه و در برنامه های تحت ویندوز دسکتاپ از روشی که لینک دادین .

با توجه به اینکه این دوستمون ظاهراً سوال خودشون رو در قسمت اشتباهی مطرح کردن ( باید در تالار ASP.NET مطرح میشد ) من راه حل رو براشون کمی توضیح میدم مابقی اش با خودشون ( آسونه )

http://up.vbiran.ir/images/6149rtm097bfpxmjlyx.png

شما هنگامی که میخواین یه کاربر جدید رو در دیتابیس خودتون اضافه کنین پسوردش رو هش کنین با تابع زیر :


Public Function Hash(ByVal SourceText As String) As Byte()
Dim Ue As New UnicodeEncoding()
Dim ByteSourceText() As Byte = Ue.GetBytes(SourceText)
Dim Md5h As New MD5CryptoServiceProvider()
Return Md5h.ComputeHash(ByteSourceText)
End Function


وقتی میخواین از این پسورد هش شده استفاده کنین ( در جدول کاربران اضافه اش کنین ) به این صورت :


Dim HashedPassword() As Byte = Hash(password.ToLower)
With cmd
.Parameters.AddWithValue("@ID", username.Trim.ToLower)
.Parameters.AddWithValue("@Pass", HashedPassword)
.Parameters.AddWithValue("@IDType", IType)
.ExecuteNonQuery()
End With


Pass نام فیلد پسورد در دیتابیس هست .

http://up.vbiran.ir/images/pjaj7u09msmwoclxeaez.png

در ادامه برای اینکه بتونین پسورد وارد شده توسط کاربر رو با پسورد هش شده ذخیره شده در دیتابیس خودتون مقایسه کنین از تابع زیر استفاده کنین :


Public Function CompareBytes(ByVal tmphash As Byte(), ByVal tmpnewhash As Byte()) As Boolean
Dim bEqual As Boolean = False
If tmpnewhash.Length = tmphash.Length Then
Dim i As Integer
Do While (i < tmpnewhash.Length) AndAlso (tmpnewhash(i) = tmphash(i))
i += 1
Loop
If i = tmpnewhash.Length Then
bEqual = True
End If
End If
Return bEqual
End Function


در صورت وارد شدن پسورد صحیح , تابع فوق مقدار True رو برمیگردونه و در غیر اینصورت مقدار False رو برمیگردونه . توجه کنین که در تابع فوق مقایسه به صورت مقایسه رشته به رشته صورت نمیگیره .

موفق باشید./

marjan_gh
پنج شنبه 04 آبان 1391, 23:57 عصر
مرسی از پاسختون البته چون نتم قطع بود دیر اومدم
یه سوال دارم اینکه چند لایه بودنش مهم نیست اگه همینو بنویسم مشکل حل می شه؟