تفاوت انکودینگ، هشینگ و رمزنگاری در چیست؟
نویسنده: تیم آرنا
«این داده رمزنگاری شده» — جملهای که خیلی وقتها اشتباه گفته میشود. در واقع سه مفهوم کاملاً متفاوت وجود دارد که اغلب با هم قاطی میشوند: انکودینگ، هشینگ و رمزنگاری. بیایید یکبار برای همیشه روشنشان کنیم.
۱) انکودینگ (Encoding)
تبدیل داده به قالبی دیگر برای انتقال یا ذخیره — نه برای امنیت. کاملاً برگشتپذیر و بدون کلید.
echo "hello" | base64 # aGVsbG8=
echo "aGVsbG8=" | base64 -d # hello
⚠️ Base64 هیچ امنیتی ندارد. هر کسی میتواند آن را دیکد کند. اگر دادهای را فقط Base64 کنی، آن را «امن» نکردهای.
کاربرد درست: جاسازی تصویر در HTML، انتقال داده در JSON، و مواردی که باید دادهٔ باینری را بهصورت متن منتقل کنی.
۲) هشینگ (Hashing)
تبدیل یکطرفه به یک «اثر انگشت» با طول ثابت. برگشتپذیر نیست؛ از روی هش نمیتوان به داده رسید.
کاربردها:
- ذخیرهٔ رمز عبور (همراه با «نمک» / salt)
- بررسی صحت و یکپارچگی فایل
// در PHP
$hash = password_hash($password, PASSWORD_BCRYPT);
password_verify($input, $hash); // true / false
الگوریتمهای خوب:
bcrypt،argon2. هرگز ازmd5یاsha1برای رمز عبور استفاده نکن — سریعاند و با جدولهای آماده شکسته میشوند.
۳) رمزنگاری (Encryption)
تبدیل دوطرفه با کلید. فقط کسی که کلید را دارد میتواند داده را بازگرداند. برای محرمانگی استفاده میشود.
دو نوع اصلی:
- متقارن: یک کلید برای رمز و بازگشایی (مثل AES)
- نامتقارن: کلید عمومی و خصوصی (مثل RSA) — پایهٔ HTTPS
جمعبندی در یک جدول
| هدف | ابزار | برگشتپذیر؟ | کلید؟ |
|---|---|---|---|
| انتقال داده | انکودینگ | بله | ندارد |
| ذخیرهٔ رمز / صحت | هشینگ | خیر | ندارد |
| محرمانگی | رمزنگاری | بله (با کلید) | دارد |
اشتباه رایج
خیلیها فکر میکنند چون رشتهای «بههمریخته» بهنظر میرسد، پس امن است. اما Base64 فقط انکودینگ است. برای رمز عبور هش کن و برای دادهٔ محرمانه رمزنگاری.
میخواهی این تفاوت را عملی لمس کنی؟ در میدان نبرد آرنا چالشی داریم که یک رشتهٔ Base64 است و باید «رمزگشایی» کنی — تا با پوست و گوشت بفهمی انکودینگ، رمزنگاری نیست.