PDA

View Full Version : سوال درباره هش کردن



korosh00
دوشنبه 02 شهریور 1394, 16:09 عصر
سلام
ما الان می آییم پسورد که ابن است مثلا hamed2015469 را هش می کنیم در دیتابیس ذخیره می کنیم .
خوب این مقدار هش شده در قسمت پسورد ذخیره می شود دردریتابیس درسته ؟
خوب با داشتن این مقدار پسورد یا همون هش باز انگار ما پسورد را داریم ! چه فرقی کرد ؟
آیا موقع دستور سلکت این مقدار هش دوباره به hamed2015469 تبدیل می شود ؟ که فکر نکنم .
شاید من درست متوجه نشدم . لطفا یک توضیح کوتاه و جامع .
ممنون

abdullah20
دوشنبه 02 شهریور 1394, 16:33 عصر
این چه حرفیه دوست عزیز:متعجب:
حتی اگر یه نفر بره این رشته هش شده را از دیتابیس برداره بازم نمیتونه وارد نرم افزار بشه

systam
دوشنبه 02 شهریور 1394, 16:45 عصر
سلام
خوب دوست میتونی از رمزنگاری غیر قابل بازکشت استفاده کنی
بر فرض مثال 12345 رو هش میکنی در دیتا بیس خیره میکنی
هر موقع لازم کاربر دوباره مقدار همون 12345 رو وارد میکنه مقدار رو هش میکنه داخل یک متغیر
متغیرو با مقادر داخل دیتا بیس مقایسه میکنی اگر درست بود بقیه ماجرا
گه این کار در asp انجام میشه چون هش کردن اطلاعات غیر قابل برگشته

abdullah20
دوشنبه 02 شهریور 1394, 16:55 عصر
دوست عزیز systam سوال دوستمون korosh را متوجه نشدید
منظورشون اینه که اگر ما کلمه عبور خودمون را رمزنگاری کنیم(حالا برگشت پذیر یا برگشت ناپذیر) با داشتن رشته رمز شده انگار ما کلمه عبور را داریم و اینجا فقط کلمه عبور به حروف دیگه تغییر کرده
باید بگم اشتباه نکنید
فرض کنید شما از الگوریتم برگشت ناپذیر استفاده کردید
کاربر عضو سیستم کلمه عبور خودش را انتخاب و ذخیره میکنه و نرم افزار میاد کلمه عبور را رمز نگاری و ذخیره میکنه
مثلا کلمه عبور شما اینه hamed2015469
در فرم لاگین برنامه کلمه عبور را دریافت میکنه و دوباره رمزمنگاری میکنه و اگر با رشته داخل بانک یکی بود اجازه ورود میده
حالا اگر شما اون رشته رمزنگاری شده داخل بانک را وارد تکست باکس کنید رشته تولیدی یه چیزه دیگه میشه
فکر کنم متوجه شدید

korosh00
دوشنبه 02 شهریور 1394, 21:19 عصر
فیلد از چه نوعی باید باشه ؟

abdullah20
دوشنبه 02 شهریور 1394, 21:30 عصر
نوع فیلد نام کاربری و کلمه عبور را (nvarchar(50 قرار دهید

korosh00
دوشنبه 02 شهریور 1394, 21:45 عصر
خوب الان من هش کردم کلمه ali رو شد
b42a6d93d796915222f6ffb2ffdd6137d93c1cdb
اینم رفت ذخیره شد در دیتابیس .
حالا طرف موقع لاگین می نویسه ali چطوری تو دیتابیس ali رو پیدا می کنه ؟؟؟؟
من select * from t1 where pass='ali'

خوب اینجا رو توضیح بدید چکار کنم کاربری با پسورد ali لود بشه ؟
ممنون

بیتا حکمت
دوشنبه 02 شهریور 1394, 22:08 عصر
خوب الان من هش کردم کلمه ali رو شد
b42a6d93d796915222f6ffb2ffdd6137d93c1cdb
اینم رفت ذخیره شد در دیتابیس .
حالا طرف موقع لاگین می نویسه ali چطوری تو دیتابیس ali رو پیدا می کنه ؟؟؟؟
من select * from t1 where pass='ali'

خوب اینجا رو توضیح بدید چکار کنم کاربری با پسورد ali لود بشه ؟
ممنون


تا جایی که من دیدم بیشتر پسورد رو هش می کنن (مثلا" تو ساختار دیتابیس وردپرس که نگاه کنید ، نام کاربری به صورت عادی دیده میشه
و پسورد به صورت هش شده )
اما جواب سوال شما :
فرض کنید نام کاربری راجا هست و پسوردش هم i_ love _you_bita

حالا موقع لاگین کاربر یوزر و پسوردش رو وارد می کنه ، چون می دونیم پسوردها داخل دیتابیس به صورت Md5 ذخیره شدن
مجبوریم پسوردی رو که کاربر وارد می کنه ، به Md5 تبدیل کنیم یعنی i_ love _you_bita تبدیل به md5 میشه و فرضا"
داخل متغیر mdpass ذخیره میشه

select * from t1 where pass=mdpass

abdullah20
دوشنبه 02 شهریور 1394, 22:17 عصر
دوست عزیز من یه دوره ساخت فرم لاگین حرفه ای و تعیین سطح دسترسی برای کاربران تدریس کردم داخل اینترنت موجوده و رایگان است
اون را دانلود کنید و مشاهد کنید به طور کامل با این مسائل آشنا میشید و همه سوالات شما پاسخ داده میشه
اشتباهی یه دوره دیگه را دانلود نکنید و یکی سری اطلاعات نادرست به شما بدن
مدرس خودم هستم عبداله اسکندری

korosh00
دوشنبه 02 شهریور 1394, 22:43 عصر
من میگم پسورد وقتی هش شده باشه در دیتابیس . کاربر دیگه باید اون مقدار هش رو بزنه تا وارد بشه یا باید دوباره یک انکد شدن وجود داشته باشه که معلوم بشه کاربر پسوردش چیه .
خوب من در دیتابیس گذاشتم جای پسورد کاربر که ali است این مقدار رو
b42a6d93d796915222f6ffb2ffdd6137d93c1cdb خوب موقع سلکت کردن کاربر باید بگم کاربری با پسورد b42a6d93d796915222f6ffb2ffdd6137d93c1cdb رو سلکت کن . چون در دیتابیس همین مقدار است .
من هنوز متوجه نشدم . فقط همین نکته را می خوام بدونم . بقیه موارد فعلا لازمم نیست .

abdullah20
دوشنبه 02 شهریور 1394, 22:49 عصر
اینطوری میشه دوست عزیز



sqlcmdLogin.CommandText = "select * from tblUsers where (User_Name=@User_Name) ANd (User_Pass=@User_Pass)";
sqlcmdLogin.Parameters.Add("@User_Name", SqlDbType.NVarChar).Value = txtUserName.Text;
sqlcmdLogin.Parameters.Add("@User_Pass", SqlDbType.NVarChar).Value = CalculateMD5Hash(txtPassword.Text);



CalculateMD5Hash تابع هش کردن کلمه عبور است

korosh00
دوشنبه 02 شهریور 1394, 23:00 عصر
خوب شما الان هش کردید اطلاعات رو ؟
چه جوری فراخوانی می کنید وقتی کاربر خواست لاگین بشه ؟
دستورتون برای فراخوانی چیه ؟
من نمیدونم تونستم بگم منظورم چیه ؟
ما در دیتابیس کلا دو تا فیلد بیشتر نداریم خوب . یک نام کاربری و یکی پسورد .
حالا این دوتا هش بشن میشن همون حروف درهم و برهم و میرن در دیتابیس ذخیره میشن .
خوب تو دیتابیس دیگه نام کاربری و پسوردی ما نیست . مقدار هش شده اونها هست .
حالا چطور با کاربر با زدن مقدار نام خودش میتونه لاگین بشه ؟ تو دیتابیس که دیگه نام کاربر نیستش که .هش شده اش است؟؟؟


این کد هش کردن من است :


public static string HashEmailForGravatar(string email) {
// Create a new instance of the MD5CryptoServiceProvider object.
MD5 md5Hasher = MD5.Create();


// Convert the input string to a byte array and compute the hash.
byte[] data = md5Hasher.ComputeHash(Encoding.Default.GetBytes(em ail));


// Create a new Stringbuilder to collect the bytes
// and create a string.
StringBuilder sBuilder = new StringBuilder();


// Loop through each byte of the hashed data
// and format each one as a hexadecimal string.
for (int i = 0; i < data.Length; i++)
{
sBuilder.Append(data[i].ToString("x"));
}


return sBuilder.ToString(); // Return the hexadecimal string.
}

abdullah20
دوشنبه 02 شهریور 1394, 23:09 عصر
دوست عزیز چرا دقت نمیکنید
کلمه عبوری که وارد تکست باکس میشه در فرم لاگین هش میشه و با رشته ی هش شده داخل دیتابیس مقایسه میشه اگر برابر بود کاربر میتونه وارد نرم افزار بشه
متوجه شدید؟

korosh00
دوشنبه 02 شهریور 1394, 23:16 عصر
تشکر فراوان . متوجه شدم . ممنون

abdullah20
دوشنبه 02 شهریور 1394, 23:28 عصر
در ضمن دوست عزیز نام کاربری هیچ وقت رمزنگاری نمیشه
چون داخل نرم افزار برای بسیاری از کارها به نام کاربری نیاز داریم و فقط کلمه عبور هش میشه
موفق باشید

korosh00
سه شنبه 03 شهریور 1394, 00:29 صبح
تشکر . نه مهم اون فهم بود که ایجاد شد .
برای کانکشن استرینگ داخل هاست باید چکار کرد ؟
ممنون