خانه » آموزش » برنامه نویسی » تفاوت های بین Encoding, Encryption, Hashing و Obfuscation

تفاوت های بین Encoding, Encryption, Hashing و Obfuscation

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

 

ascii-image

Encoding

انکودینگ عبارت است از کد گزاری اطلاعات جهت نگهداری و استفاده مجدد به طوریکه به راحتی از کد آن به اطلاعات آنها برسیم. مثلا حروف الفبای فارسی انکودینگ های مختلفی دارد. به تصویر بالا مراجعه کنید.  مانند ASCII, Unicode, URL Encoding, Base64 .

 

 

ciphertext

Encryption

عبارت است از تغییر اطلاعات جهت مخفی وسری نگهداشتن آن. به عنوان مثال ارسال نامه به شخص به گونه ای که فقط او بتواند متن نامه را بخواند. ویا ارسال کلمه عبور بصورت امن در داخل اینترنت. هدف اصلی در اینجا قابلیت استفاده نبوده و فقط می خواهیم مطمئن شویم که اطلاعات توسط گیرنده اصلی آن قابل استفاده باشد. مانند: AES, Blowfish, RSA

 

 

hashing

Hashing

تغییر یک داده یا اطلاعات بصورتی که یکپارچگی آن حفظ شده و  بتوان فهمید که فایلی تغییر کرده یا نکرده و یا کاربرد امنیتی می توان استفاده کرد. هرچند در برخی تقسیم بندی ها Hashing را نیز جزو انواع Encryption قرار می دهند اما بالعکس Encrypt که دوطرفه است یعنی اول کد می شود و بعدا دیکد، کاملا یکطرفه می باشد و می توان فقط جهت مقایسه مثلا اینکه یک ورودی با مقدار هش داده شده برابری می کند یا نه استفاده کرد. مثلا فرض کنید پسورد در یک سیستم بصورت هش ذخیره شود، در موارد دیگری که پسورد از ورودی دریافت می شود می توان هش آن دو را باهم مقایسه کرد که اگر یکی بود یعنی پسورد درست وارد شده است. بصورت فنی هش یک ورودی می گیرد و آن را به یک طول رشته ثابتی تبدیل می کند که چند شرط دارد: همیشه یک وردی یک خروجی داشته باشد، همچنین به هیچ عنوان نباید  از خروجی به ورودی رسید. همانطور که اشاره کردم از هش برای حفظ یکپارچگی و یا جهت امنیت می توان استفاده کرد. مانند: SHA-3, MD5 (Now obsolete)

 

obfuscated-e1454498907454

Obfuscation

کاربر آن برای وقتی است که نخواهیم معنی چیزی فهمیده شود و معمولا در کدها جهت جلوگیری از مهندسی معکوس به کار گرفته می شود. مانند JavaScript Obfuscator, ProGuard

منبع:
https://danielmiessler.com/study/encoding-encryption-hashing-obfuscation/

آموزش برنامه نویسی اندروید

درباره مهدی تاجیک

مهندس نرم افزار و مدیر پروژه. از سال 82 برنامه نویسی رو بصورت جدی شروع کردم و از سال 90 برنامه نویسی اندروید می کنم. علاقه زیادی به یادگرفتن و یاد دادن دارم.

۱ دیدگاه

دیدگاهتان را ثبت کنید

آدرس ایمیل شما منتشر نخواهد شدعلامتدارها لازمند *

*

bigtheme