یک تابع هش (Hash Function) (که به فارسی درهمسازی گفته میشود)، تابعی است که مقدار ورودی را دریافت کرده و با استفاده از آن، مقدار خروجی یکتا برای آن اجیاد میکند. در صورتی که تغییر در ورودی ایجاد شود خروجی تابع هم متفاوت خواهد بود.
بنابراین، یک تابع هش چیزی است که ورودی را دریافت کرده (که میتواند هر نوع دادهای شامل عدد، فایل و دیگر موارد باشد) و یک هش را به عنوان خروجی میدهد. یک هش معمولا به صورت یک عدد «مبنای شانزده» (Hexadecimal) نمایش داده میشود.
تابع قابل مشاهده در تصویر بالا، تابع هش md5 است، که از هر داده ورودی یک خروجی ۳۲ کاراکتری در مبنای ۱۶ میسازد. تابع هش معمولا برگشتناپذیر (یک طرفه) است، بدین معنا که نمیتوان از روی خروجی به ورودی رسید و در واقع ورودی را فهمید، مگر آنکه کاربر هر ورودی ممکنی را امتحان کند (به این کار حمله جستوجوی فراگیر یا brute-force attack گفته میشود). توابع هش معمولا برای مشخص کردن آنکه چیزی مشابه چیز دیگری است، بدون آشکارسازی اطلاعات پیشین، مورد استفاده قرار میگیرند. در ادامه یک مثال برای این توضیح آورده شده است.
«آلیس» (Alice) به «باب» (Bob) ادعا میکند که پاسخ مساله ریاضی مطرح شده در کلاس را میداند. باب از آلیس میخواهد که این موضوع را بدون گفتن پاسخ نهایی مساله به او اثبات کند. بنابراین آلیس هش پاسخ خود را به باب میدهد (فرض میشود که پاسخ عدد ۴۲ است):
آلیس هش را به باب میدهد. بدین ترتیب باب با استفاده از هش نمیتواند بفهمد که پاسخ صحیح چیست اما هنگامی که خودش به پاسخ صحیح دست یافت میتواند پاسخ خود را هش کند و اگر نتیجه مشابهی دریافت کرد متوجه میشود که آلیس به او حقیقت را گفته و پاسخ مساله را به درستی به دست آورده است. هشها معمولا در زمینه «تایید اطلاعات» (verifying information) بدون آشکارسازی آنچه در حال تایید است مورد استفاده قرار میگیرند.