PDA

View Full Version : مشکل با تابع GetHash



prans_tork
جمعه 13 شهریور 1394, 10:00 صبح
با سلام خدمت همه دوستان


لطفاً نظراتتون رو بگید در مورد مطلب زیر:



یه برنامه تحت شبکه نوشتم با استفاده از امکانات sql server 2012 و vs 2013 به صورت دکستاپ برای اجرا در یک شبکه محلی کوچک (درمانگاه).
با یه فرم لاگین که کاربر برای ورود به نرم افزار ازش استفاده میکنه.
سیستم و سیستم عامل سرور(کلاینت) از نوع 64 بیتی و کلاینت ها 32 بیتی هستن (دلیل این کار اینه که سرور خریداری شده و اما کلاینت ها از ابتدا در محل وجود داشتند)


وقتی همه سیستم ها از نظر سیستم عامل (7 یا xp یا 8 و ...) و از نظر 32 یا 64 یکی هستن هیچ مشکلی نیست.


مشکل از اینجا شروع میشه که نوع سیستم عامل کلاینت با نوع سیستم عامل سرور فرق کنه
در این صورت با وجود درست وارد کردن پسوورد، اما پیغامی که پیش بینی کردم نمایش داده میشه (کلمه عبور صحیح نمیباشد).
برای حل این مشکل ناچارم پسوورد هش شده کاربر رو در دیتا بیس تغییر بدم.


من در برنامه این کارو کردم :
(از اونجایی که شبکه Lan هست و بدون دسترسی به اینترنت وبا کاربران محدود)
در موقع ثبت نام که از روی سرور با ویندوز 7 64 بیتی انجام میشه پسوورد رو از کاربر میگیرم و با تابع GetHash تبدیلش میکنم و در دیتابیس ذخیره میکنم.
حالا اگر کاربر از روی سرور لاگین کنه مشکلی نیست


اما وقتی از روی کلاینت با ویندوز 32 بیتی لاگین میکنه، سیستم پیغام صحیح نبودن کلمه عبور رو میده
پس از بررسی فهمیدم که مشکل از اینجا ناشی میشه که خروجی تابع GetHash در سیستم های 32 و 64 بیتی، کاملا متفاوته.
این مشکل موقعی نمود بیشتری داره که سیستم عامل کلاینت 8 و 64 بیتی باشه.
حالا دقیق نمیدونم مشکل از 32 و 64 بیتی بودن سیستم هاست و یا به نوع سیستم عامل (7 و 8 و ...) بستگی داره


حالا با اینکه میدونم میتونم از روش های جایگزین استفاده کنم، میخاستم ببینم برای حل این مشکل راه حلی داری؟؟؟
در واقع دنبال راه حلی برای سازگاری سیستم های 32 بیتی و 64 بیتی هستم(البه به نظر خودم مشکل به خاطر اینه)


برای مثال میتونم از MD5 یا روش های مشابه استفاده کنم.
اما آیا این روشها هم در سیستم های 32 و 64 بیتی خروجی متفاوت خواهند داشت؟


ممنونم از نظراتتون

FastCode
جمعه 13 شهریور 1394, 10:24 صبح
GetHash تحت هیچ شرایطی نباید برای مصارف امنیتی استفاده بشه.
از HashBytes با parameter ه SHA1 استفاده کنید.

prans_tork
جمعه 13 شهریور 1394, 10:31 صبح
GetHash تحت هیچ شرایطی نباید برای مصارف امنیتی استفاده بشه.
از HashBytes با parameter ه SHA1 استفاده کنید.

با سلام و تشکر از پاسخ شما

آیا خروجی این روش در سیستم های 32 و 64 بیتی متفاوت نخواهد بود؟؟

prans_tork
شنبه 14 شهریور 1394, 01:12 صبح
با سلام و تشکر از پاسخ شما

آیا خروجی این روش در سیستم های 32 و 64 بیتی متفاوت نخواهد بود؟؟

ممنونم
پاسخ رو خودم در MSDN پیدا کردم و با MD5 مشکل حل شد:

Notes to Callers
The value returned by GetHashCode is platform-dependent. It differs on the 32-bit and 64-bit versions of the .NET Framework. It also can differ between versions of the .NET Framework.

FastCode
یک شنبه 15 شهریور 1394, 11:50 صبح
MD5 رو حتما با pepper و salt باید استفاده کنید.
SHA1 با salt تنها برای کارهایی که نیاز به امنیت زیاد ندارند کافیه.
برای اطلاعات بیشتر جست و جو کنید PBKDF2