Hash فرآیند تبدیل یک کلید معین یا رشتهای از کاراکترها به یک مقدار دیگر است. این مقدار معمولاً یک مقدار یا کلید کوتاهتر و با طول ثابت است که نشاندهنده رشته اصلی بوده و یافتن یا استفاده از آن را آسانتر میکند.
یکی از رایجترین کاربردهای هشینگ، ایجاد جداول درهمسازی (Hash Tables) است. یک جدول درهمسازی، جفتهای کلید و مقدار را در فهرستی ذخیره میکند که از طریق اندیس آن قابل دسترسی است. از آنجایی که تعداد جفتهای کلید و مقدار نامحدود است، تابع درهمساز، کلیدها را به اندازه جدول نگاشت میکند. سپس، مقدار درهمسازی به عنوان اندیس یک عنصر خاص در نظر گرفته میشود
یک تابع درهمساز، مقادیر جدیدی را بر اساس یک الگوریتم ریاضی درهمسازی تولید میکند که به آن مقدار درهمسازی یا به اختصار هش گفته میشود. برای جلوگیری از تبدیل مجدد هش به کلید اصلی، یک هش خوب همواره از یک الگوریتم درهمسازی یکطرفه استفاده میکند.
Hashing در زمینههای مختلفی کاربرد دارد که از جمله آنها میتوان به فهرستبندی و بازیابی دادهها، امضاهای دیجیتال، امنیت سایبری و رمزنگاری اشاره کرد، اما محدود به این موارد نیست.
Hash چگونه کار میکند؟
فرآیند هشینگ شامل سه جزء اصلی است:
- ورودی: دادهای که به الگوریتم داده میشود، ورودی نامیده میشود. این داده میتواند هر طول و قالبی داشته باشد. برای مثال، یک فایل موسیقی یا یک مقاله میتواند به عنوان ورودی در نظر گرفته شود. در هشینگ، از تمام بخشهای داده ورودی برای تولید یک خروجی واحد استفاده میشود.
- تابع درهمساز (Hash Function): بخش اصلی فرآیند هشینگ، تابع درهمساز است. 1 این تابع داده ورودی را دریافت کرده و مجموعهای از عملیات ریاضی را بر روی آن اعمال میکند و در نتیجه یک رشته کاراکتری با طول ثابت تولید میکند. تابع درهمساز تضمین میکند که حتی یک تغییر کوچک در داده ورودی، یک مقدار درهمسازی کاملاً متفاوت ایجاد کند.
- خروجی درهمسازی (Hash Output): برخلاف ورودی، خروجی فرآیند هشینگ یا مقدار درهمسازی، طول ثابتی دارد. تعیین طول ورودی اصلی به دلیل طول ثابت خروجیها دشوار است که این امر به افزایش کلی امنیت کمک میکند. یک مقدار درهمسازی، رشتهای از کاراکترها و اعداد است که ممکن است برای یک هکر قابل خواندن نباشد و به حفظ حریم خصوصی اطلاعات افراد کمک کند. از آنجایی که هر مقدار درهمسازی منحصربهفرد است، مقادیر درهمسازی اغلب به عنوان اثر انگشت نیز شناخته میشوند.

مزایای Hashing
هشینگ در زمینههای مختلفی مانند رمزنگاری، علوم کامپیوتر و مدیریت داده کاربرد دارد. برخی از کاربردها و مزایای رایج عبارتند از:
- یکپارچگی داده: با تولید یک مقدار هش برای حجم مشخصی از دادهها، مانند یک فایل یا پیام، کاربر میتواند بعداً آن را با مقدار هش دادههای دریافتی مقایسه کند تا بررسی کند که آیا در طول انتقال تغییری ایجاد شده یا دادهها خراب شدهاند یا خیر.
- بازیابی کارآمد داده: Hash امکان بازیابی کارآمد دادهها را در جداول درهمسازی، به ویژه هنگام کار با مجموعههای داده بزرگ، فراهم میکند. این روش از توابع یا الگوریتمهایی برای نگاشت دادههای شی به یک مقدار عدد صحیح نماینده استفاده میکند. سپس میتوان از هش برای محدود کردن جستجوها هنگام یافتن این موارد در نقشه دادههای شی استفاده کرد. به عنوان مثال، در جداول درهمسازی، توسعهدهندگان دادهها – شاید یک رکورد مشتری – را به صورت جفتهای کلید و مقدار ذخیره میکنند. کلید، داده را شناسایی کرده و به عنوان ورودی تابع درهمسازی عمل میکند، در حالی که کد هش یا عدد صحیح، به یک اندازه ثابت نگاشت میشود. معمولاً توابع پشتیبانی شده توسط جداول درهمسازی شامل درج (کلید، مقدار)، دریافت (کلید) و حذف (کلید) است.
- امضاهای دیجیتال:علاوه بر امکان بازیابی سریع دادهها، Hash به رمزگذاری و رمزگشایی امضاهای دیجیتالی که برای تأیید هویت فرستندگان و گیرندگان پیام استفاده میشوند، کمک میکند. در این سناریو، یک تابع هش، امضای دیجیتال را قبل از اینکه هم مقدار هش شده – که به عنوان خلاصه پیام شناخته میشود – و هم امضا در انتقالات جداگانه به گیرنده ارسال شوند، تغییر میدهد. پس از دریافت، همان تابع هش، خلاصه پیام را از امضا استخراج میکند، که سپس با خلاصه پیام منتقل شده مقایسه میشود تا اطمینان حاصل شود که هر دو یکسان هستند. در یک عملیات هشینگ یکطرفه، تابع هش، مقدار یا کلید اصلی را فهرستبندی میکند و امکان دسترسی به دادههای مرتبط با یک مقدار یا کلید خاص که بازیابی شده است را فراهم میکند.
- ذخیرهسازی گذرواژ: به جای ذخیره گذرواژهها به صورت متن ساده، آنها هش شده و به عنوان مقادیر هش ذخیره میشوند. این امر یک لایه امنیتی اضافی را اضافه میکند، به طوری که حتی اگر مقادیر هش به خطر بیفتند، مهندسی معکوس گذرواژههای اصلی از نظر محاسباتی غیرممکن است.
- جستجوی سریع: الگوریتمهای هشینگ برای سازماندهی دادهها در سطلهای به راحتی قابل جستجو طراحی شدهاند. این امر جستجوی دادههای خاص را در مقایسه با سایر ساختارهای داده سریعتر میکند. هشینگ به ویژه در برنامههایی که نیاز به نتایج جستجوی سریع دارند، مانند پایگاههای داده و موتورهای جستجو، مفید است.
- ذخیرهسازی موقت کارآمد (Efficient Caching): جداول درهمسازی معمولاً برای پیکربندی سیستمهای ذخیرهسازی موقت استفاده میشوند. با استفاده از مقادیر هش به عنوان کلید، دادهها میتوانند به سرعت از حافظه پنهان بازیابی شوند و نیاز به دسترسی به سیستمهای ذخیرهسازی کندتر کاهش یابد. این امر عملکرد کلی سیستم و زمان پاسخگویی را بهبود میبخشد.
- کاربردهای رمزنگاری: هشینگ نقش مهمی در الگوریتمهای مختلف رمزنگاری ایفا میکند. توابع هش رمزنگاری برای تولید امضاهای دیجیتال، تأیید هویت پیامها و اطمینان از یکپارچگی و اصالت دادهها استفاده میشوند. الگوریتمهای هشینگ مانند Secure Hash Algorithm 2 یا SHA-2 به طور گسترده در برنامههای رمزنگاری مورد استفاده قرار میگیرند.
- بهرهوری فضا: هشینگ امکان استفاده کارآمد از فضای ذخیرهسازی را فراهم میکند. مقادیر هش معمولاً کوتاهتر از دادههای اصلی هستند و آنها را فشردهتر و ذخیرهسازی آنها را آسانتر میکند. این امر به ویژه هنگام کار با مجموعههای داده بزرگ یا منابع ذخیرهسازی محدود مفید است.
- فناوری بلاک چین: Hash به طور گسترده در بلاک چین، به ویژه در ارزهای دیجیتال مانند بیت کوین، استفاده میشود. بلاک چین یک دفتر کل دیجیتال است که دادههای تراکنش را ذخیره میکند و هر رکورد جدید یک بلوک نامیده میشود. از آنجایی که همه شرکتکنندگان در یک بلاک چین به دادههای یکسان دسترسی دارند، اطمینان از یکپارچگی تراکنشهای قبلی بسیار مهم است. اینجاست که هشینگ وارد عمل میشود، زیرا یکپارچگی و تغییرناپذیری دادههای ذخیره شده در بلوکها را تضمین میکند.
- فشردهسازی داده: با استفاده از الگوریتمهای کدگذاری مانند الگوریتم کدگذاری هافمن، که یک الگوریتم فشردهسازی بدون اتلاف است، میتوان از هشینگ برای کدگذاری کارآمد دادهها استفاده کرد.
- مدیریت پایگاه داده: هنگام کار با مجموعههای داده بزرگ، جستجو در میان چندین ورودی برای به دست آوردن دادههای مورد نیاز میتواند دشوار باشد. هشینگ یک راه حل جایگزین ارائه میدهد و به کاربران امکان میدهد تا با استفاده از یک کلید جستجو و یک تابع هش به جای ساختار فهرست، به جستجوی رکوردهای داده بپردازند. فایلهای هش، دادهها را در سطلهایی سازماندهی میکنند که هر کدام میتوانند شامل تعداد زیادی رکورد باشند. نقش اساسی توابع هش، نگاشت کلیدهای جستجو به مکان دقیق یک رکورد در یک سطل معین است.

هشینگ در ساختمان داده چیست؟
در ساختمانهای داده، از هشینگ برای ذخیره و بازیابی کارآمد دادهها استفاده میشود. سیستم ردهبندی دهدهی دیویی، که سالهاست امکان سازماندهی و ذخیرهسازی کتابها بر اساس موضوع آنها را در کتابخانهها فراهم کرده است، عملکرد خوبی داشته و مفهوم اساسی آن در علوم کامپیوتر نیز به همان اندازه کارآمد است. مهندسان نرمافزار میتوانند با کوچک کردن داراییهای داده اصلی و رشتههای ورودی به کلیدهای هش کوتاه الفبایی-عددی، هم در فضای فایل و هم در زمان صرفهجویی کنند.
هنگامی که فردی به دنبال موردی در یک نقشه داده میگردد، هشینگ دامنه جستجو را محدود میکند. در این سناریو، کدهای هش یک فهرست برای ذخیره مقادیر ایجاد میکنند. در اینجا، از هشینگ برای فهرستبندی و بازیابی اطلاعات از یک پایگاه داده استفاده میشود زیرا به تسریع این فرآیند کمک میکند. یافتن یک مورد با استفاده از کلید هش کوتاهتر آن بسیار آسانتر از مقدار اصلی آن است.
Hash در مقابل Encryption
هشینگ و رمزنگاری هر دو تکنیکهای رمزنگاری هستند که برای محافظت از دادهها استفاده میشوند، اما اهداف متفاوتی دارند و ویژگیهای متمایزی دارند.
Hashing
- هشینگ یک فرآیند یکطرفه است که با استفاده از یک تابع هش، دادهها را به یک مقدار هش با طول ثابت تبدیل میکند.
- هدف اصلی هشینگ، اطمینان از یکپارچگی دادهها و اعتبارسنجی دادههای اصلی است.
- توابع هش طوری طراحی شدهاند که سریع و کارآمد باشند و برای هر ورودی، مقادیر هش منحصربهفردی تولید کنند.
- هشینگ غیرقابل برگشت است، به این معنی که بازیابی دادههای اصلی از مقدار هش از نظر محاسباتی غیرعملی است.
- هشینگ اغلب برای ذخیره گذرواژهها، ایجاد امضاهای دیجیتال و تأیید یکپارچگی دادهها استفاده میشود.
- الگوریتمهای هشینگ شامل MD5، SHA-3 و SHA-256 هستند.
Encryption
- رمزنگاری یک فرآیند دو مرحلهای است که با استفاده از یک الگوریتم رمزنگاری و یک کلید، دادهها را به یک شکل غیرقابل خواندن یا متن رمزشده تبدیل میکند.
- هدف اساسی رمزنگاری، اطمینان از محرمانگی دادهها و محافظت از اطلاعات حساس در برابر دسترسی غیرمجاز است.
- رمزنگاری برای تبدیل دادهها بین متن ساده و متن رمزشده به کلیدهای رمزگذاری و رمزگشایی نیاز دارد.
- الگوریتمهای رمزنگاری طوری طراحی شدهاند که امن و مقاوم در برابر حملات باشند و رمزگشایی متن رمزشده را بدون کلید صحیح برای طرفهای غیرمجاز غیرممکن میسازند.
- رمزنگاری یک روش محبوب برای ارتباطات امن، ذخیرهسازی دادهها و ایمنسازی اطلاعات حساس است.
- نمونههایی از الگوریتمهای رمزنگاری شامل RSA (ریوست-شامیر-آدلمن)، استاندارد رمزنگاری پیشرفته (AES) و بلوفیش هستند.