هشینگ پسورد (Password hashing) چیست؟ رمزگذاری (Encryption) در ASP.Net با الگوریتم هش MD5 ، SHA1 ، SHA-256 و مفهوم نمک (Salt) در کدگذاری

Oxford Plus Website

Current user: Guest
7/27/2021

صفحۀ اصلی |> وبلاگ آکسفورد پلاس |> بخش توسعه ی نرم افزار |> نکات امنیت وب سایت / Website security tips |> هشینگ پسورد (Password hashing) چیست؟ رمزگذاری (Encryption) در ASP.Net با الگوریتم هش MD5 ، SHA1 ، SHA-256 و مفهوم نمک (Salt) در کدگذاری

الگوریتم هش (Hash) چیست؟

الگوریتم هش، یک تابع ریاضی نسبتا پیچیده است که یک ورودی از داده ها را به یک خروجی از داده های دیگری تبدیل می کند بطوریکه در آن، شرایط زیر برقرار است:

1. داده ی ورودی می تواند هر طول دلخواهی داشته باشد (از یک رشته ی چند کارکتری تا یک فایل چندین گیگا بایتی) اما داده ی خروجی همواره طول ثابتی خواهد داشت، در حد یک رشته ی ده/بیست کاراکتری.

2. برای هر ورودی، همواره خروجی یکسانی تولید خواهد شد که منحصربفرد است. یعنی هیچ دو ورودی دارای خروجی هش یکسانی نخواهند بود و از این روی به خروجی هش، اثر انگشت نیز گفته می شود چرا که هر انسان هم اثر انگشت منحصربفرد خود را دارد.

3. فرآیند هش کردن یا به عبارت دیگر تابع هشینگ (Hashing)، یک تابع یک طرفه می باشد. به این معنی که هیچ الگوریتمی وجود ندارد که بتواند داده ی اولیه را از خروجی یک تابع هش استخراج نماید.

4. کوچکترین تغییر در داده ی ورودی، مثل افزایش یا کاهش فقط یک نقطه یا تغییر جای دو کاراکتر باهم، چنان تغییر فاحشی در خروجی تولید خواهد کرد که تقریبا تمامی کاراکترهای خروجی عوض خواهند شد.

نکته ی دیگر اینکه الگوریتم هشینگ دارای انواع مختلفی می باشد مانند الگوریتم SHA1، الگوریتم SHA256، الگوریتم MD5 و غیره که البته همه ی آنها کار مشابهی را انجام می دهند اما به روش های مختلف. خب. پس یک دید کلی راجع به تابع یا الگوریتم هش به دست آمد (یا یادآوری شد). اما در ادامه، نکاتی درباره ی هشینگ پسورد در وب سایت ها را می خوانیم.

هشینگ پسورد (Password hashing) چیست و چرا در وب سایت ها از آن استفاده می شود؟

اغلب وب سایت هایی که به امنیت اهمیت می دهند، پسورد کاربران خود را بصورت هش شده در پایگاه داده ی خود نگهداری می کنند. هر کاربری که برای اولین بار در وب سایت ثبت نام کرده است و پسوردی را برای خود تعیین کرده است، آن پسورد بصورت هش شده، برای وی ثبت و نگهداری خواهد شد. به این روش، هشینگ پسورد یا Password hashing در وب سایت گفته می شود.

هشینگ پسورد در یک وب سایت، بدلیل بالا بردن امنیت آن وب سایت صورت می گیرد. اینکه چرا امنیت بالا می رود، یک جواب یک جمله ای دارد: "فقط آن بخش از اطلاعات شما در امنیت قرار دارد که حتی خود شما از آن بی اطلاع باشید". این یک واقعیت تلخ است که اینترنت یک محل نا امن است و به هر اطلاعاتی که در پایگاه داده های وب سرورها ذخیره می کنید، ممکن است روزی یک هکر نیز دسترسی پیدا کند. پس اگر پسورد کاربران را در پایگاه داده ی وب سایت خود نگهداری می کنید، شانس آورده اید که هک نشده اند، شاید هم هک شده اند و شما هنوز اطلاع ندارید!

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

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

هر بار که کاربری که قبلا در وب سایت ثبت نام کرده است، می خواهد لاگین کند، پسورد وارد شده مجددا بصورت هش در می آید و سپس با مقدار هش شده ی داخل پایگاه داده مقایسه می شود تا اطمینان حاصل گردد که پسورد بصورت صحیح وارد شده است یا خیر. همانگونه که در بند دوم از شرایط تابع هش اشاره شد، در تابع هش، برای هر ورودی، همراه خروجی یکسانی تولید خواهد شد. پس پسورد را هر زمان که مجددا هش بکنیم، مقدار ثابتی به ما خواهد داد که می توان آنرا با مقدار ذخیره شده در پایگاه داده، مقایسه بکینم و ببینم که پسورد وارد شده صحیح است یا خیر.

سوالی که در اینجا پیش می آید این است که آیا هکرها می توانند با پسورد های هش شده ای که از پایگاه داده ی یک وب سایت دزدیده اند، در آن وب سایت لاگین کنند یا خیر؟ جواب منفی است. چنانچه در بند چهارم از شرایط تابع هش خواندیم، کوچکترین تغییر در داده ی ورودی، مثل افزایش یا کاهش فقط یک نقطه یا تغییر جای دو کاراکتر باهم، چنان تغییر فاحشی در خروجی تولید خواهد کرد که تقریبا تمامی کاراکترهای خروجی عوض خواهند شد. از آنجاییکه در مکانیزم لاگین شدن، مقدار وارد شده توسط کاربر در صفحه ی لاگین، مجددا هش می شود، شکل هش شده ی یک پسورد با هش شدن مجدد در فرآیند لاگین، یک مقدار کاملا متفاوتی تولید خواهد کرد که با مقدار هش شده ی پسورد اولیه تطابق نخواهد داشت.

مکانیزم رفع مشکل کاربرانی که پسورد خود را فراموش کرده اند

مسلما بارها در صفحه ی لاگین وب سایت های مختلف، لینک یا دکمه ی "پسورد خود را فراموش کرده ام" را دیده اید. من خودم بارها پسورد عضویت در یک سایت خاص را گم کرده ام و با استفاده از گزینه ی مذکور، آنها پسوردم را مجددا به ایمیل من ارسال کرده اند. البته اکنون با مطالعه ی مطالب بالا، دیگر می دانیم که اگر یک وب سایتی در هنگام تقاضا، پسورد شما را مجددا برایتان ارسال کند، به هیچ وجه امن نیست.

اصولا وب سایت هایی که از هشینگ پسورد استفاده می کنند، دیگر حتی خودشان هم پسورد شما را نمی دانند چه برسد که آنرا برایتان ارسال کنند. در این وب سایت ها، در هنگام کلیک بر روی لینک یا دکمه ی "پسورد خود را فراموش کرده ام"، یک لینک تجدید پسورد (Password Reset) به ایمیل کاربر ارسال می گردد و کاربر از این طریق می تواند پسورد جدیدی را برای خود در وب سایت مذکور ثبت کند. البته پسورد جدید بازهم بصورت هش شده در پایگاه داده ی آن وب سایت ذخیره خواهد شد.

با هشینگ پسورد، برای هکرها چقدر زحمت تراشیده می شود؟

آیا با استفاده از روش هشینگ پسورد، وب سایت خود را کاملا ایمن کرده ایم؟ جواب منفی است! بعنوان یک برنامه نویس باید این واقعیت را بعنوان یک اصل تغییر ناپذیر بپذیریم که امنیت کامل در دنیای نرم افزار دست نیافتنی است. بنابراین پسوردها حتی بصورت هش شده نیز از گزند هکرهای ماهر، کاملا در امان نیستند. یک هکر حرفه ای که تخصص وی در زمینه ی هک کردن پسوردهای هش شده است، یک ابزارها و روش هایی در آستین خود دارد که می تواند شما را غافلگیر کند!

آنها خواهند توانست با نرم افزارهای ویژه، میلیون ها پسورد احتمالی را بصورت هش شده درآورند و سپس آنها را تک به تک با مقدار دزدیده شده از وب سایت شما مقایسه بکنند و در نهایت به پسورد اولیه دست پیدا کنند. شاید بگویید حدث زدن، هش کردن و مقایسه ی میلیون ها پسورد احتمالی با اطلاعات دزدیده شده، عمر نوح می خواهد، اما از این واقعیت نباید غافل شد که هکرهای ماهر، پسوردهایی که افراد معمولا بکار می برند را می دانند و در ابتدا آن پسوردها را امتحان خواهند کرد. از همین رو است که همواره بر این تاکید می شود که کاربران برای خود پسوردهای ساده و قابل حدث زدن را انتخاب نکنند. پسوردهایی دارای امنیت بیشتری هستند که پیچیده بوده و به راحتی حدث زده نشوند.

زنگ خطر زمانی به صدا درآمد که ابزارهای قدرتمند تری برای هک کردن هشینگ در اختیار هکرها قرار گرفت. ابزارهایی همچون "حمله ی دیکشنری (Dictionary attack)" و "جدول رنگین کمان (Rainbow table)". در روش اول، هکرها با استفاده از هش کردن لغات موجود در دیکشنری ها و مقایسه ی آن با اطلاعات پایگاه داده ی وب سایت قربانی، می توانند برخی از پسوردها را به دست آورند. بنابراین اگر شما پسوردی دارید که در یک دیکشنری هم یافت می شود، حتی اگر کلمه ی پیچیده و دور از ذهنی مثل کلمه ی sophisticated باشد، هکر ها با استفاده از Dictionary attack در عرض چند دقیقه پسورد شما را خواهند دانست. در روش دوم یعنی جدول رنگین کمان، آنها یک جدول آماده از مقادیر هش شده ی کلمات دیکشنری به نام Rainbow table را در اختیار دارند که با آن می توانند زمان دستیابی به پسورد شما را از چند دقیقه، به کسری از ثانیه تبدیل کنند.

استفاده از نمک (Salt) در هشینگ پسورد، روشی است که معمولا بکار گرفته می شود که حملات Dictionary attack و Rainbow table را خنثی سازد و زحمت بسیار زیادی برای هکرها تراشیده شود بطوریکه از هک پسوردهای شما منصرف گردند.

مفهوم نمک (Salt) در کدگذاری

چنانچه گفته شد، هکرها جداولی بنام Rainbow table در اختیار دارند که شامل مقادیر هش شده ی مجموعه ای از پسوردهای عمومی که اغلب کاربران از آنها بعنوان کلمه ی عبور استفاده می کنند و همچنین کلمات موجود در دیکشنری ها می باشند و آنها می توانند این مقادیر را با بکمک نرم افزار های مخصوص این کار با پسوردهای هش شده ی موجود در پایگاه داده ی وب سایت ما مقایسه کنند تا بفهمند که پسوردها چه هستند. اما اگر پسوردهای کاربران وب سایت را به هنگام هش کردن با رشته ی کاراکتری نسبتا طولانی که بصورت کاملا اتفاقی و بدون معنی خاصی تولید شده است مخلوط کرده و سپس هش کنیم چه؟ احتمال اینکه مقدار هش شده ی یک پسورد حتی خیلی ساده و موجود در برگ نخست دیکشنری که با یک رشته ی 15 یا 20 کاراکتری متشکل از کاراکترهای اتفاقی ترکیب شده است، هنوز در Rainbow table باشد چقدر است؟ به جرأت می توان گفت که این احتمال بسیار نزدیک به صفر است. پس می بینیم که با یک تکنیک ساده می توان بر سر راه هکرها سنگ اندازی کرد. اصولا به آن رشته ی نسبتا طولانی متشکل از کاراکترهای اتفاقی که به هنگام هش کردن با پسورد اولیه مخلوط می کنند، نمک یا Salt گفته می شود، شکل 1.

شکل 1. رمزگذاری پسورد بکمک نمک و هش کردن / Password Encryption Using Salt Hashing

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

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

نگهداری نمک در کنار هش کد پسوردها، این نگرانی را پیش می آورد که هکرهایی که مقدار هش کدها را به دست آورده اند می توانند نمک های مربوط به هر هش کد را نیز به دست بیاورند اما آیا آنها با داشتن نمک و Rainbow table می توانند بفهمند که پسوردها چه هستند؟ جواب مثبت است اما با سختی و هزینه ی زیاد چرا که آنها باید برای هر پسورد، کل Rainbow table را با نمک مربوطه از ابتدا کامپیال کنند. یعنی تمام کلمات دیکشنری را با آن نمک ترکیب کنند و یک Rainbow table جدید تولید کنند و سپس به دنبال هش کد همخوان (match) در داخل آن بگردند. که این زمان زیادی از آنها خواهد گرفت که ممکن است آنها را منصرف نماید اما اگر ارزشش را داشته باشد، این کار را خواهند کرد.

من برای بالا بردن بیشتر امنیت در وب سایت خودم، آکسفورد پلاس از دو تکنیک بهره خواهم برد که آن دو تکنیک را بعنوان پیش نهاد خدمت شما هم عرض می کنم که شاید بعنوان توسعه دهنده استفاده نمایید و همچنین دیدگاه های دوستان صاحب نظر را نیز در این زمینه دریافت کنم. پیشنهاد اول این است که نمک را بصورت ساده به ابتدا یا انتهای پسورد نیافزاییم، بلکه آنرا با یک الگوی خاصی با پسورد بیامیزیم. این کار زمانی می تواند مفید باشد که هکرها فقط به محتوای پایگاه داده دسترسی پیدا کرده باشند و هنوز کد و الگوریتم های وب سایت از گزند آنها مصون مانده باشد. در این صورت آنها به تعداد حالاتی که می شود پسورد و نمک را با هم درآمیخت باید Rainbow table تولید کنند تا بتوانند پسوردهای ما را هک کنند.

پیشنهاد دوم من است که الگوریتم آمیختن پسورد با نمک را بصورت کامپایل شده در وب سایت نگهداری کنیم. من وب سایت های خودم را تحت ASP.Net و #C توسعه می دهم. یک امکان در ASP.Net وجود دارد که شما می توانید علاوه بر کنترل های موجود، کنترل خود را تولید و در توسعه ی وب سایت ها استفاده نمایید بطوریکه اگر کنترل را از نوع Custom Control ایجاد کنید، الگوریتم های داخل آن بصورت کامپایل شده نگهداری خواهند شد. حال اگر حتی کد وب سایت توسط هکرها مورد دستبرد قرار بگیرد، یک زحمت اضافی نیز برای Decompile کردن چنین کنترلی را بر گردن هکرها گذاشته ایم که به نوبه ی خود یک لایه ی امنیتی بیشتر محسوب می شود.

و پیشنهاد سوم من این است که کاربران را به استفاده از پسوردهای پیچیده و غیر قابل حدث زدن تشویق نماییم. من در آینده ی نزدیک برای کاربران وب سایت آکسفورد پلاس پیش نهاد خواهم داد که برای تولید پسورد پیچیده و همچنین نگهداری اطلاعات کاربری خود در وب سایت های مختلف از نرم افزار +KeyO (کی او پلاس) استفاده کنند. من مدتی است که این نرم افزار را توسعه داده ام و خودم شخصا از آن استفاده می کنم و خیلی از آن راضی هستم چرا که اطلاعات تمامی حساب های کاربری خودم را در آن نگهداری می کنم و برای تمامی حساب هایم، پسوردهای بسیار پیچیده با همین نرم افزار تولید کرده ام و هیچ نیازی هم به حفظ کردن آنها در ذهن خودم ندارم. شکل 2 نمایی از ورژن اولیه و آزمایشی نرم افزار +KeyO را نشان میدهد.

شکل 2. نمایی از ورژن اولیه ی نرم افزار +KeyO

همچنین نرم افزار +KeyO می تواند پسوردهای بسیار قدرتمند و با امنیت بالایی تولید کند که احتمال حدث زدن و هک کردن آنها توسط هکرها و احتمال وجود آنها در داخل جامع ترین Rainbow table ها، حتی بدون آمیختن با نمک، تقریبا صفر است. در شکل 3 مشاهده می شود که فقط با کلیک بر روی دکمه ی Generate یک پسورد فوق العاده پیچیده و قدرتمند توسط نرم افزار تولید می شود که می توان از آن بعنوان کلمه ی عبور در وب سایت های مختلف استفاده کرد و جالب اینکه شما مجبور به حفظ کردن چنین پسوردی در ذهن خود نخواهید بود و در موقع لاگین کردن فقط کافیست دکمه ی copy to clipboard (شکل 2) را کلیک کنید تا پسورد در کلیپ برد کپی شود و سپس براحتی می توانید در صفحه ی لاگین مربوطه، در کادر پسورد، محتوای کلیپ برد را Paste کنید.

شکل 3. تولید پسوردهای بسیار قدرتمند با استفاده از نرم افزار +KeyO

یک مزیت دیگر استفاده از نرم افزار +KeyO این است که اگر در هنگام لاگین کردن در یک وب سایت، کسی به شما نگاه کند یا مثلا شما در هنگام ضبط یک ویدئوی آموزشی، مجبور باشید در حساب کاربری خود در یک وب سایت خاص لاگین کنید، ناظران فقط کپی و Paste شدن چند کارکتر ستاره ای را خواهند دید.

نرم افزار +KeyO درواقع یکی از محصولات ما در وب سایت آکسفورد پلاس می باشد که فعلا در حال توسعه بوده و آنرا به زودی منتشر خواهیم کرد. دوستان محترمی که مایل به استفاده از این نرم افزار هستند لطفا در یکی از صفحات اجتماعی ما که در نقش خبرنامه های وب سایت ها و پروژه های بنده هستند عضو شوند (آدرس ها در پایین همین صفحه) تا به محض انتشار این نرم افزار، مطلع شوند.

و اما پیش نهاد چهارم و آخر اینکه مقادیر نمک را در پایگاه داده ی یک وب سایت دیگر که در یک سرور دیگر هاست می شود نگهداری کنیم. من معمولا برای هاستینگ وب سایت آموزین (وب سایت قدیمی بنده که دیگر توسط ما پشتیبانی نمی گردد)، از خدمات یک شرکت و برای هاستینگ وب سایت آکسفورد پلاس از خدمات یک شرکت دیگر استفاده می کنم. اگر اطلاعات پایگاه داده ی یکی از وب سایت ها توسط یکی از کارکنان شرکت هاستینگ مورد دستبرد قرار بگیرد، جای بخش دیگر اطلاعات در شرکت دوم هنوز امن خواهد بود.

رمزگذاری (Encryption) در ASP.Net با الگوریتم هش MD5 ، SHA1 ، SHA-256

در ASP.Net کلاس آماده ای بنام Crypto وجود دارد که تعدادی از الگوریتم های هشینگ را بصورت آماده در داخل خود دارد و شما می توانید به راحتی از آنها برای رمزگذاری (Encryption) و هشینگ پسوردها استفاده کنید. من برای اینکه این کلاس را آزمایش کرده و طرز کار آن را به شما نشان داده باشم، HTML شکل 4 را بصورت موقتی به سرآیند وبلاگ Developer افزودم.

شکل 4. HTML افزوده شده بصورت موقتی به سرآیند وبلاگ Developer

بعد از این کار، صفحه ای که هم اکنون نیز پیش روی شماست بصورت شکل 5 درآمد. یک کادر دریافت پسورد خام و یک دکمه برای آزمایش کلاس هشینگ آماده به کار است.

شکل 5. خروجی HTML

اکنون به سراغ کدنویسی می رویم. اما کلاس Crypto نیاز به اعلان فضای نام System.Web.Helpers دارد. برای این منظور مطابق شکل 6، این Name Space را اعلان می کنیم. توجه: چنانچه با تایپ کردن این اعلان متوجه شدید که فضای نام Helpers بر روی پلتفرم شما نصب نیست، به آموزش نصب آن در مقاله ی (افزودن کتابخانه، کلاس و پکیج جدید توسط NuGet به پروژه های تحت ASP.Net در Visual Studio) مراجعه فرمایید.

شکل 6. اعلان فضای نام لازم

پس از این مراحل، سه سطر کد شکل 7 را به دکمه ی btnEncryption می نویسیم. این کد پسورد خام را از ورودی گرفته و آنرا پس از هشینگ با الگوریتم SHA1 به نمایش در می آورد. به طرز بکار گیری کلاس Crypto دقت کنید. این کلاس یک رشته از کاراکترها که در این مورد پسورد اولیه است را با متد SHA1 خود می گیرد و مقدار هش شده با الگوریتم هشینگ SHA1 را برگرداند.

شکل 7. کد نوشته شده برای هشینگ SHA1

کد هش تولید شده برای پسورد ما با متد SHA1 بصورت شکل 8 به نمایش در می آید.

شکل 8. نمایش کد هش شده با متد SHA1

چنانچه بخواهید پسورد ورودی را با الگوریتم های دیگر هشینگ کدگذاری کنید، مانند شکل 9 می توانید از متد های دیگر کلاس Crypto استفاده کنید. مثلا برای هشینگ با الگوریتم SHA256 متد مشخص شده با فلش قرمز را انتخاب می کنیم. حال آزمایش این کلاس را کمی تغییر می دهیم تا ببینیم چطور می شود کد هشینگ MD5 را بعنوان خروجی از آن دریافت کنیم. برای این منظور از متد مشخص شده با فلش آبی رنگ استفاده می کنیم.

شکل 9. متدهای مختلف هشینگ در کلاس Crypto

برای هشینگ پسورد با الگوریتم MD5 کد را بصورت شکل 10 تغییر می دهیم.

شکل 10. کد کدگذاری پسورد با الگوریتم هشینگ MD5

در شکل 11 کد هشینگ برای همان پسورد قبلی را مشاهده می کنید.

شکل 11. کد هشینگ MD5 تولید شده برای پسورد

این مقاله به مرور زمان بروز رسانی و تکمیل تر خواهد شد. شبکه های اجتماعی ما در حکم خبرنامه های وب سایت آکسفورد پلاس و مقالات و پروژه های مرتبط هستند. با عضویت در یکی از آنها (اطلاعات در پایین همین صفحه) در جریان انتشار مقالات، بروز رسانی های مطالب و اخبار ما قرار بگیرید.

موفق و پیروز باشید.

مدیریت وبسایت آکسفورد پلاس.

منابع

منبع 1 (از وب سایت aftab.cc)

منبع 2 (از وب سایت wikipedia)

منبع 3 (از وب سایت wikipedia)

منبع 4 (از وب سایت wikipedia)

منبع 5 (از وب سایت php.net)

منبع 6 (از وب سایت c-sharpcorner.com)

منبع 7 (از وب سایت c-sharpcorner.com)

منبع 8 (از وب سایت c-sharpcorner.com)

منبع 9 (از وب سایت codeproject.com)

نظرات خوانندگان این مطلب:

نوشته شده توسط: مدیریت وب سایت
12/7/2019 5:22:07 PM

سلام آقای امیر.
ضمن عذرخواهی بخاطر تاخیر در پاسخگویی، لازم است تذکر بدهم که با هر تغییر جزئی در ورودی، کل رشته ی خروجی توابع هشینگ از جمله MD5، دچار تغییر می‌گردد. و اینکه این توابع به گونه‌ای طراحی شده‌اند که یکطرفه باشند یعنی حتی با داشتن کد هشینگ کامل هم نمی‌توان رشته‌ی ورودی را حدس زد یا محاسبه کرد، چه برسد به اینکه بخواهیم فقط با بخشی از کد، جواب را حدس بزنیم. پاسخ شما این است که این کار کاملا غیرممکن است.
باتشکر.
مهندس قنبری
نوشته شده توسط: Amir
12/3/2019 12:00:29 AM

مثلا شما در بالا توضيح داديد ك ١٣ رقم اول كد md5 رو محاسبه ميكنيد. ايا با داشتن ١٣ كاراكتر از كد md5 در بازيهاي كازينو ميتوان جواب رو حدس زد؟؟؟ ممنونم
نوشته شده توسط: amir
12/2/2019 11:48:58 PM

سلام مهندس ي سوال داشتم. ما با داشتن چند كاراكتر از كدهاي md5 ميتونيم جواب رو حدس بزنيم؟؟؟ كلا كد هاي md5 بعد از چند كاراكتر ديگه روي خروجي تاثيري نداره؟؟ ايا ميشود با داشتن تعدادي مثلا ١٣ تا كاراكتر جواب رو تا حدي حدس زد. ممنون
نوشته شده توسط:
12/2/2019 11:44:17 PM

سلام مهندس خسته نباشيد. من يك سوال مهم دارم ممنون ميشم جوابم رو بديد. ما چند كاراكتر از كد md5 رو داشته باشيم ميتونيم جواب رو حدس بزنيم. مثلا اگر جواب ب صورت عدد باشه؟. با چند كاراكتر تكراري ميتوان ب جواب رسيد؟؟؟ ممنون
نوشته شده توسط: مدیریت وب سایت
2/27/2018 5:14:02 PM

با سلام،
دوست گرامی، آقای صابر، متاسفانه ما پروژه ی دانشجویی قبول نمی کنیم.
با تشکر.
عبدالرضا قنبری
نوشته شده توسط: saber
2/26/2018 1:01:16 PM

slm khaste nabashid bande mikhastam baraye yek bazi baram barname beneviid k sharhesh b in gone mibashad
man mikham be in adad beresam ba estefade az code md5

این بازی بر اساس یک الگوریتم ریاضی طراحی شده و کار می کند.

در هر نوبت سرور ما بصورت رندوم یک SHA256 Hash را تولید می کند. (مانند bdf37e491ec2c0e02c1d731460f247c21319772829af19f619ce882f76614d67)

این Hash ریز مبلغ را دارا می باشد.

زمانی که بازی شروع می شود، ما بلافاصله رمز عبور این Hash را با عنوان “MD5” به شما می دهیم. (مانند : eddb8cd3bfee6569eca07dec15631e87)

اگر حتی شما از مکانیزم MD5 کاملا بی اطلاع باشید، براحتی می توانید بصورت آنلاین مبدل های MD5 را در گوگل بیابید. MD5 یک الگوریتم کدگذاری شده ی غیر معکوس شونده ( غیر قابل جعل) است.

این MD5 Hash گواهی است بر آن که ما تغییری در ریز مبالغ هنگام شروع بازی نمی دهیم.

چگونگی محاسبه ی ریز مبلغ با SHA256 Hash :

گام اول:

ابتدا ما این SHA256 Hash را برای هر ۴ رقم تقسیم می کنیم. (بشکل :bdf3-7e49-1ec2-c0e0-2c1d-7314-60f2-47c2-1319-7728-29af-19f6-19ce-882f-7661-4d67)

هر کدام از این کدهای ۴ بخشی بر مبنای ۱۶ گان هستند، که ما این ۱۶ گان را به ۱۰گان(دهگان) تبدیل کرده و همه را با هم جمع می کنیم.

و سپس امتحان می کنیم که آیا این مبلغ بر ۵۰ بخش پذیر (قابل تقسیم) هست. (برای این مورد یا Hash خاص حاصل ۳۴۸.۲۷۹ می باشد)

اگر این رقم بر ۵۰ بخش پذیر بود بازی بروی 0.00 تنظیم می گردد.

این قالب بازی است. به این معنا که شرکت یکبار از ۵۰ بار برده است. امکان باخت شما هم ۱ از ۵۰ می باشد.

گام دوم :

اگر SHA256 Hash بر ۵۰ بخش پذیر نباشد سپس ما دوباره ریز مبلغ را محاسبه می کنیم.

ما ۱۳ رقم ابتدایی SHA256 Hash را برداشته(مانند: bdf37e491ec2c) و این رقم ۱۶ تایی را به ۱۰ تایی (براساس دهگان) تبدیل می کنیم. (برای این مورد یا Hash خاص 3341655894780972 می باشد). ما این را حاصل X می نامیم.

سپس ما Y را 4503599627370496 می نامیم. (این پنجاه و دومین توان بر ۲ می باشد).

فرمول محاسبه ی ریز مبلغ :
برای این مورد خاص
((100 * Y) - X) / (100*(Y-X))
برای مثال در این نمونه :
((100*4503599627370496) - 3341655894780972) / (100*(4503599627370496 -3341655894780972))
حاصل 3,8471596714 می باشد.
که ما اولین دو رقم بعد از کاما را محاسبه می کنیم ، که بر این اساس حاصل 3,84 است
kheili mamnoon
نوشته شده توسط: مهندس عبدالرضا قنبری
تعداد بازدیدها: 2764

تاریخ های بروز رسانی این صفحه

  • 03 September 2017 - 1396/06/12
  • 02 September 2017 - 1396/06/11
  • 29 August 2017 - 1396/06/07
  • 25 August 2017 - 1396/06/03
  • 24 August 2017 - 1396/06/02

شما در این بخش می توانید نظر خود را به گوش نویسندۀ مطالب این صفحه برسانید. نظرات شما برای ما ارزشمند هستند:

نام شما (اختیاری):
آدرس ایمیل شما (اختیاری):
توجه: آدرس ایمیل شما بصورت محرمانه، محفوظ نگه داشته خواهد شد و صرفا از آن برای اطلاع رسانی به شما در مورد نتیجۀ پاسخ گویی به نظرتان و احیانا ارسال خبرنامه های وبسایت مان یعنی آکسفورد پلاس استفاده خواهد شد، بطوریکه شما هر لحظه می توانید آن را غیرفعال کنید.
نظر ارزشمند شما:

فرآیند امنیتی: لطفا قبل از ارسال نظر، مجموع دو عدد 17 و 5 را در کادر مقابل بنویسید:
About Us

Oxford Plus (O+) website v5.2
Powered by ContentO Plus v3.1