وبلاگ

جدید ترین اخبار برنامه نویسی

هش چیست ؟
-

هَش (درهم‌سازی) در واقع اختصاص به مبحث ارزهای دیجیتال ندارد و یک مفهوم ریاضی است.
انواع هَش
MD4 (128 bits, obsolete)
MD5 (128 bits)
RIPEMD-160 (160 bits)
SHA-1 (160 bits)
SHA-256, SHA-384
SHA-512 (longer versions of SHA-1, with) slightly different designs

جواب قطعی داشته باشد. یعنی ورودی یکسان همیشه خروجی یکسانی داشته باشد.
به سرعت برای هر پیام ورودی قابل محاسبه باشد.
پیدا کردن ورودی از طریق خروجی یا همان هَش تقریبا نشدنی باشد. (به جز این که تمامی ورودی های ممکن تست شود)
یه تغییر کوچک داخل ورودی منجر به تغییر زیاد در خروجی (هَش) شود.
پیدا کردن دو ورودی که هش یکسان تولید کنند تقریبا نشدنی باشد. (تصادم هَش)
برای تشخیص هش‌های معروف می‌توان از تعداد کاراکتر بهره برد، بدین صورت که هش‌های md5 مقدار 32 کاراکتر دارند، هش‌های sha1 مقدار 40 کاراکتر و هش‌های sha256 تعداد 64 و هش‌های sha512 تعداد 128 کاراکتر دارند.
PHP تابع hash() را ارائه میدهد. آرگومان اول نام الگوریتم را میگیرد( شما میتوانید از الگوریتم های sha256 , sha512 , md5 , sha1 و دیگر الگوریتم های متداول استفاده کنید). آرگومان دوم هم متنی که قرار است تبدیل به hash شود. اضافه کردن امنیت با استفاده از Salts خب با استفاده از sha512 شما بیشترین امنیت را به پسورتان اضافه میکنید. اما اگر حمله کننده به دیتابیس از انواع الگوریتم ها برای برگرداندن پسورد شما استفاده کند میتواند پسوردها را به راحتی رمزگشایی کند. راه حل استفاده از یک عدد تصادفی در تولید hash است که با آن salt میگویند. در هر بار که ما تولید hash میکنیم از یک عدد تصادفی استفاده میکنیم. شما فقط کافی است که یک عدد تصادفی در اندازه خاصی تولید و آن را به متن پسورد بدهید سپس آن را hash کنید. حتی اگر پسورد دو اکانت شبیه هم باشد باز هم رشته hash شده شبیه هم نخواهد بود زیرا ما از عدد تصادفی استفاده میکنیم. برای اعتبارسنجی کاربر باید مقدار salt را در ذخیره کنیم(در یکی از فیلدهای دیتابیس). زمانی که کاربر سعی کرد وارد اکانت خود شود مقدار salt را در پسورد وارد شده وارد میکنیم سپس با استفاده از تابع hash مقایسه را انجام میدهیم.
در الگوریتم های هش برای همه ی ورودی های با طول متفاوت، طول کد تولید شده ثابت و غیرقابل بازگشت می باشد. بنابراین در حقیقت روشن نیست که یک عبارت معادل یک رشته MD5 چیست . در MD5 نیز فایل های ورودی با هر اندازه و هر فرمتی که باشند، کد خروجی همیشه برابر با ۱۲۸ بیت (۱۶ بایت) خواهد بود که معمولا آن را در قالب ۳۲ عدد هگزادسیمال (مبنای ۱۶) نمایش می دهند. همانطور که ذکر شد ویژگی دیگر این الگوریتم غیر قابل بازگشت بودن یا یک طرفه بودن کد تولید شده می باشد. یعنی نمی توان با استفاده از کد خروجی، ورودی الگوریتم را تشخیص داد. این ویژگی باعث شده است در موارد بسیاری از MD5 برای ذخیره سازی داده ها مانند ذخیره رمزهای عبور استفاده شود. از آنجا که MD5 برای هر فایل یک اثر انگشت ایجاد می کند می توان از آن برای اطمینان از صحت فایل ها استفاده کرد. به عنوان مثال هنگامی که فایلی را از اینترنت دانلود می کنید اگر در سایت دانلود فایل، کد MD5 فایل هم قرار داده شده باشد می توانید MD5 فایل دانلود شده را با MD5 داده شده در سایت مقایسه کنید و در صورت برابر بودن مطمئن شوید که فایل، صحیح دانلود شده است و یا در بین راه به ویروس آلوده نشده است
برای توضیحات ریاضی و محاسبه هش