🔐 داستان هش کردن و bcrypt در دنیای وب

تصور کن یک روز دوستی ازت می‌پرسه: «هش کردن یعنی چی؟»
شاید اولین جوابی که به ذهنت برسه این باشه: «یه چیز کامپیوتریه!»
اما پشت این اصطلاح ساده، یکی از مهم‌ترین رازهای امنیت در دنیای دیجیتال پنهان شده.


🎭 داستان کوتاه درباره هش کردن در نرم افزار

فرض کن علی می‌خواد وارد حساب کاربریش بشه.
او رمز عبورش رو وارد می‌کنه: mypassword123.
حالا سیستم باید بررسی کنه که این رمز درسته یا نه.
اما آیا منطقیه که رمز واقعی علی در دیتابیس ذخیره بشه؟

  • قطعاً نه! چون اگر دیتابیس هک بشه، همه‌ی رمزها لو میرن.

اینجاست که هش کردن وارد ماجرا میشه.
سیستم، رمز علی رو با الگوریتمی مثل bcrypt تبدیل می‌کنه به یک رشته‌ی عجیب و طولانی که هیچ‌کس نمی‌تونه دوباره به رمز اصلی برگردونه.
مثلاً:

$2b$10$EixZaYVK1fsbw1ZfbX3OXePaWxn96p36xj2J8U8xXnYhZz5lQJ9lK

وقتی علی دفعه‌ی بعد وارد میشه، سیستم رمز جدیدی که وارد کرده رو دوباره هش می‌کنه و با هش ذخیره‌شده مقایسه می‌کنه. اگر یکی بودن، یعنی رمز درست وارد شده.


📌 چرا این کار مهمه؟

  • اگر دیتابیس هک بشه، هکرها فقط هش‌ها رو می‌بینن، نه رمز واقعی.

  • حتی اگر دو نفر رمز یکسان داشته باشن، به لطف salt (رشته‌ی تصادفی اضافه‌شده توسط bcrypt)، هش‌هاشون متفاوت خواهد بود.

  • این یعنی حملات معروف مثل Rainbow Table عملاً بی‌اثر میشن.


⚙️ bcrypt چطور کار می‌کنه؟

  • رمز عبور رو می‌گیره.

  • یک salt تصادفی بهش اضافه می‌کنه.

  • چندین بار عملیات ریاضی پیچیده روش انجام میده.

  • خروجی یک رشته‌ی طولانی و غیرقابل برگشت میشه.


📝 مثال کدنویسی

const bcrypt = require('bcrypt');

const password = "mypassword123";
const hashed = await bcrypt.hash(password, 10);

console.log(hashed);

خروجی یک رشته‌ی طولانیه که هیچ‌وقت نمی‌تونه به رمز اصلی برگرده.


🎯 نتیجه‌گیری

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


📊 نمودار ساده جریان ورود کاربر

User → Password → Hash → Compare → Login