خب Encryption و Encoding و Hashing اصطلاح های شبیه به هم هستن و همین باعث میشه که خیلی وقت ها آدم رو گیج کنن. پس بریم که گره ها رو باز کنیم و دونه دونه بریم سراغشون.
اولی: Encoding
توی روش Encoding، داده هامون از یک فرم به یک فرم دیگه تغییر پیدا میکنن. هدف اصلی Encode کردن اینه که داده رو به فرمی تبدیل کنیم که توسط اکثر سیستم ها قابل خوندن بشه یا برای هر پروسس externalای قابل استفاده بشه. این روش برای امن کردن داده نیست. الگوریتم های عمومی (Public) زیادی برای Encode کردن موجود هستند.
یکی از استفاده های مهم Encoding کاهش دادن سایز فایل های صوتی و تصویریه. هر فرمت فایل صوتی و تصویری یک برنامه coded (که جمع و جور شده ی coder-decoderه) مربوط به خودش رو داره که برای code کردن فایل به فرمت مناسب و همینطور برای decode کردن در زمان پخش استفاده میشه.
مثال هاش: ASCII، BASE64، UNICODE
دومی: Encryption
در واقع Encryption یک تکنیک encodingه. منتها به نحوی که داده مون توسط یک الگورتیم encyption، encode میشه. این کار به نحوی انجام میشه که فقط آدم هایی که جوازش رو دارن بتونن به داده دسترسی پیدا کنن. قراره از Encryption به این خاطر استفاده کنیم که داده مون از چشم بقیه دور بمونه. شبیه به وقت هایی که با دوست های خیلی صمیمی مون توی دبستان یک زبان اختراع میکردیم که فقط خودمون تا دو تا میفهمیدیم چی میگیم.
توی فرآیند Encryption داده ای که قراره Encrypt بشه (که بهش میگیم plain-text) توسط الگوریتم encryptionای مثل AES یا RAS با استفاده از یک secret key که بهش میگیم cipher انتقال داده میشه. به داده encrypt شده cipher-text میگیم و در آخر کار هم سمتی که قراره داده رو بگیره با همون secret key داده رو به حالت plain-text بر میگردونه.
به صورت کلی دو نوع الگوریتم encryption داریم که بهشون symmetric encryption و asymmetric encryption گفته میشه که اگر بخوایم از فارسی سخت استفاده کنیم به ترتیب به رمزنگاری متقارن و رمزنگاری نامتقارن ترجمه شون میکنیم. (به نظر من فکر کردن به ترجمه هاشون شما رو الکی میترسونه، نسبتا بحث پیچیده ای هستن ولی نه اندازه ای که فارسیش میترسونه)
در حالت symmetric encryption برای رمزنگاری فقط از یک کلید هم برای encode و decode کردن استفاده میشه (مثلا الگورتیم AES همینطوریه) ولی در حالت asymmetric encryption داده با کمک دو کلید مختلف که به اسم private key و public key شناخته میشن، رمزنگاری رو انجام میدیم. (مثالش هم الگوریتم RSA).
(به نظر من جا داره که درباره اش بیشتر بخونید چون هم پرکاربرده هم پر تکرار)
سومی Hashing:
در فرآیند Hashingِ، داده با یه hashing function به یک hash تبدیل میشه که میتونه هر عبارت عجیب و غریبی که شامل کاراکترهاست باشه. نکته اینجاست که هر عبارتی فقط به یک عبارت عجیب و غریب hash میشه و اگر کسی بخواد اون وسط تغییری توی داده ایجاد کنه کلا یک عبارت عجیب و غریب دیگه ایجاد میشه. ما از این طریق میتونیم به صحت داده مون پی ببریم. مثلا اگر مسیجی یا عکسی به دوستامون توی پیام رسان های درست و حسابی بفرستیم اگر کسی اون وسط دستکاریش کنه، hash داده ای که به دوستمون رسیده با hash داده ای که ما فرستادیم فرق داره. یه استفاده دیگه از hash میتونه برایverify کردن پسوردهامون زمان وارد شدن به وبسایت های مختلف باشه.
برای نوشتن این پست از این لینک هم استفاده شد.