PDA

View Full Version : hash کردن پسورد



Sp|R|T
چهارشنبه 04 آبان 1390, 03:40 صبح
سلام

من یک برنامه (WPF) ساختم که وصل میشه به mysql سایتم

سایم هم از PHP Nuke هستش

خب در این برنامه یک صفحه ثبت نام داره و یه صفحه هم لوگین

من برای ثبت نام این کار رو انجام دادم:

اینکه به دیتابیس وصل میشه(table user) و کاربر فیلد هارو پر میکنه

ولی مشکل اینجاست که کاربر دقیق چیزی که توی صفحه برنامه پر میکنه، توی دیتابیس ثبت میشه

در صورتی که پسورد در دیتابیس باید بصورت هش شده ثبت بشه !

و همچنین برای لوگین هم عکس این قضیه هس

مثلا کسی که از توی سایتم عضو شده باشه، پسوردش بصورت هش شده در دیتابیس ثبت شده
و اگر اون کاربر بیاد اینبار از توی برنامه لوگین کنه، خب به دیتابیس وصل میشه و یوزر و پسوردی که وارد میکنه، دیتابیس چک میکنه و میگوید اشتباس

چون پسورد بصورت هش شده در دیتابیس ست شده و دیتابیس پسورد رو بصورت ساده چک کرده که میگوید اشتباس

خب راهکار چیست ؟

راه دیگه ای هم هست ؟ بدون وصل شدن به دیتابیس و و و ...

pooria_googooli
چهارشنبه 04 آبان 1390, 09:13 صبح
خوب دوست عزیز شما پسورد را که ذخیره میکنی hash میکنی و ذخیره میکنه . پس هر دفعه که کاربر قصد لاگین داره شما باید پسوردی که اون وارد میکنه را hash کنی و با پسورد hash شده توی دیتا بیس مقایسه کنی ببینی یکسان هست یا نه . اگه یکسان بود اجازه ورود بدی . منظورم را متوجه شدی ؟

Sp|R|T
چهارشنبه 04 آبان 1390, 12:56 عصر
خوب دوست عزیز شما پسورد را که ذخیره میکنی hash میکنی و ذخیره میکنه . پس هر دفعه که کاربر قصد لاگین داره شما باید پسوردی که اون وارد میکنه را hash کنی و با پسورد hash شده توی دیتا بیس مقایسه کنی ببینی یکسان هست یا نه . اگه یکسان بود اجازه ورود بدی . منظورم را متوجه شدی ؟

ممنونم از پاسختان

بله، منظورتان متوجه شدم

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

pooria_googooli
چهارشنبه 04 آبان 1390, 14:06 عصر
من برای هش کردنن معمولا از الگوریتم MD5 استفاده میکنم . خوبیش اینه عملا اون پسورد هش شده غیر قابل برگشته . توی این لینک طریقه استفادش را گفته :
http://msdn.microsoft.com/en-us/library/system.security.cryptography.md5.aspx

Sp|R|T
چهارشنبه 04 آبان 1390, 14:18 عصر
من برای هش کردنن معمولا از الگوریتم MD5 استفاده میکنم . خوبیش اینه عملا اون پسورد هش شده غیر قابل برگشته . توی این لینک طریقه استفادش را گفته :
http://msdn.microsoft.com/en-us/library/system.security.cryptography.md5.aspx

تشکر

ولی من باید برحست الگورتمی پسورد رو هش کنم که سایتم داره ازش استفاده میکنه

مثلآ وقتی در سایتم کسی با پسورد 12345 عضو بشه، این هش در Mysql ثبت میشه :

827ccb0eea8a706c4c34a16891f84e7b

که میتوان با این سایت (http://www.md5decrypter.co.uk/) کرک کرد

مهم نیس که قابل برگشت باشه یا نه

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

Sp|R|T
چهارشنبه 04 آبان 1390, 14:42 عصر
من همین سایت رو که دادین رو چک کردم دیدم دقیق پسوردی که هش میکنه با سایتم هم خونی داره ;)

یعنی میتونم از همین الگوریتم استفاده کنم

و فقط حالا مشکلم اینه که چطور وقتی کاربر موقع ثبت نام توی textbox.password کلمه ای که وارد میکنه و submit رو که میزنه

باید فبل از ایکه توی دیتابیس او پسورد ثبت بشه باید به MD5 تبدیل بشه و سپس توی دیتابیس ثبت بشه

چطور کد رو تغییر بدم ؟

pooria_googooli
چهارشنبه 04 آبان 1390, 14:45 عصر
من نمیدونم شما چجوری متغیر هات را توی دیتا بیس ذخیره میکنی . ولی این که دیگه کار دشواری نیست . شما یه رشته به عنوان ورودی میدی به الگوریتم یک رشتم به عنووان خروجی تحول میگیری همون را ثبت کن دیگه .

Sp|R|T
چهارشنبه 04 آبان 1390, 14:47 عصر
من همین سایت رو که دادین رو چک کردم دیدم دقیق پسوردی که هش میکنه با سایتم هم خونی داره ;)

یعنی میتونم از همین الگوریتم استفاده کنم

و فقط حالا مشکلم اینه که چطور وقتی کاربر موقع ثبت نام توی textbox.password کلمه ای که وارد میکنه و submit رو که میزنه

باید فبل از ایکه توی اون پسورد توی دیتابیس ثبت بشه باید به MD5 تبدیل بشه و سپس توی دیتابیس ثبت بشه

چطور کد رو تغییر بدم ؟ که این کار رو انجام بدم

Sp|R|T
چهارشنبه 04 آبان 1390, 16:14 عصر
نمیدونم چرا کد به این راحتی اینقد خنگی در آوردم :لبخند::لبخند:

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

البته میدونم کسی نیست که اینجور سوالی رو بکنه :دی :خجالت:

namespace MD
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}

static string GetMd5Hash(MD5 md5Hash, string input)
{

// Convert the input string to a byte array and compute the hash.
byte[] data = md5Hash.ComputeHash(Encoding.UTF8.GetBytes(input)) ;

// 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("x2"));
}

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

private void button1_Click(object sender, RoutedEventArgs e)
{
string source = passwordBox1.Password;
using (MD5 md5Hash = MD5.Create())
{
string hash = GetMd5Hash(md5Hash, source);

textBox2.Text = (hash);

}

}
}
}

این کد مقداری که در passworbox.password وارد شده رو به MD5 تبدیل میکنه

و سپس مقدار رو داخل texbox2.tex قرار میده

خب حالا شما برای ثبت در دیتابیس مقدار textbox.text رو میتونین ذخیره کنین :لبخند::لبخند:

با تشکر از دوست خوبم pooria_googooli (http://barnamenevis.org/member.php?131461-pooria_googooli) :قلب:

ya30ien2
چهارشنبه 04 آبان 1390, 20:50 عصر
ما که سر در نمیاریم خود دوستمون سوال میکنن و خودشون هم جواب خودشون رو میدن
نمیدونم شاید واسه اینه که یکم اساتید دیگه جواب نمیدن !!!!!!!!!!!!!!!!!!!!!!!

pooria_googooli
چهارشنبه 04 آبان 1390, 21:05 عصر
نه من جوابشون را دادم . ایشون کامل شده سورسشون را اینجا گذاشتند که اگه کسی دیگه مشکلی مشابه داشت استفاده کنه . به نظر من کارشون قشنگ بود .