ذخیره امن رمز عبور کاربران در پایگاه داده (Database) وب سایت (حتی با هک شدن پایگاه داده نیز هکر نتواند رمز عبور کاربر را حدس بزند)، با هش کردن (Hashing)، در برنامه نویسی (Programming)
همان طور که می دانید، ((نام کاربری)) و ((رمز عبور)) کاربرانی که در وب سایت ثبت نام می کنند، در جدولی (Table) در پایگاه داده (Database) ذخیره می شود. اما نگه داشتن این اطلاعات حساس در پایگاه داده، این خطر را دارد که اگر یک هکر بتواند به این اطلاعات حساس موجود در پایگاه داده دسترسی پیدا کند، آنگاه ((نام کاربری)) و ((رمز عبور)) تمامی کاربران وب سایت را خواهد داشت.
بنابراین نباید ((رمز عبور)) کاربران را عینا در پایگاه داده ذخیره کنیم و باید آنها را به شکلی در پایگاه داده ذخیره نماییم که حتی اگر هکر آنها را به دست آورد، نتواند ((رمز عبور)) کاربر را متوجه شود. بنابراین باید اطلاعاتی را در پایگاه داده قرار دهیم که توسط آن بتوانیم صحت ((رمز عبور)) کاربر را تشخیص دهیم، اما در عین حال، نباید از آن اطلاعات، خود ((رمز عبور)) به دست آید. راه حل این موضوع، استفاده از هش کردن (Hashing) است، که در ادامه توضیح می دهیم که هش کردن (Hashing) دقیقا به چه صورت عمل می کند که این ویژگی را برای ما برآورده می کند.
هش کردن (Hashing)، برای رمزنگاری (Cryptography) اطلاعات به کار می رود. نوع رمزنگاری (Cryptography) در هش کردن (Hashing)، رمزنگاری ((یک طرفه)) است (در مقابل رمزنگاری ((یک طرفه))، رمزنگاری ((دو طرفه)) را داریم).
منظور از ((یک طرفه)) بودن این است که وقتی یک مقدار ورودی را به الگوریتم هش کردن (Hashing) می دهیم و الگوریتم، عملیات خود را بر روی آن مقدار ورودی اجرا می کند و یک مقدار خروجی را به ما می دهد، آنگاه ما نمی توانیم که از روی مقدار خروجی، مقدار ورودی را به دست آوریم (یعنی عملیاتی وجود ندارد که با اجرای آن بر روی مقدار خروجی، مقدار ورودی را به دست آوریم).
بنابراین وقتی ما ((رمز عبور)) کاربر را به الگوریتم هش کردن (Hashing) می دهیم، آن الگوریتم، هش شده آن را در خروجی به ما می دهد و بنابراین ما به جای خود ((رمز عبور))، هش شده ((رمز عبور)) که یک عبارت متنی (رشته (String)) است را در پایگاه داده ذخیره می کنیم. با توجه به اینکه از هش شده ((رمز عبور)) کاربر، نمی توان خود ((رمز عبور)) را به دست اورد، بنابراین اگر یک هکر، اطلاعات پایگاه داده را به دست آورد، نمی تواند ((رمز عبور)) کاربران را متوجه شود.
هر زمان هم که کاربر بخواهد در وب سایت وارد شود (Login کند)، ((رمز عبور)) خود را وارد می کند و ما با استفاده از همان الگوریت هش کردن (Hashing)، هش شده آن را به دست آورده و با مقداری که قبلا در پایگاه داده ذخیره شده است، مقایسه می کنیم و اگر هر دو یکسان بودند، پس صحت ((رمز عبور)) کاربر تایید می شود و متوجه می شویم که خود کاربر است و اجازه وارد شدن (Login کردن) به وی می دهیم.
حال چون ما (مدیر وب سایت)، ((رمز عبور)) کاربر را به طور دقیق نمی دانیم و تنها عبارتی برای چک کردن آن داریم، اگر کاربر ((رمز عبور)) خود را فراموش کند و از ما درخواست کمک کند، تنها راه حل این است که ما یک ((رمز عبور)) جدید برای کاربر قرار دهیم و هش شده (Hashing) آن رمز عبور جدید در پایگاه داده قرار داده شود و خود ((رمز عبور)) هم توسط ایمیل به کاربر اطلاع داده شود (هیچگاه خود ((رمز عبور)) را در هیچ محلی از وب سایت، ذخیره نمی کنیم) (یا مثلا از خود کاربر می خواهیم که یک رمز عبور جدید تعیین کند و به ما بگوید و هش شده آن را در پایگاه داده ذخیره می کنیم).