سطح مقدماتی (Beginner Level)
هشینگ (Hashing) فرآیندی است که در آن دادههای ورودی با طول نامشخص به یک رشته با طول ثابت (معمولاً هگزادسیمال) تبدیل میشوند. بر خلاف رمزنگاری (Encryption)، هشینگ یکطرفه است؛ یعنی نمیتوانید از هش به داده اصلی برسید. ماژول hashlib در پایتون رابط استانداردی برای الگوریتمهای محبوب مثل SHA-256 و MD5 ارائه میدهد.
۱. مفهوم هش و استفاده از SHA-256
برای تولید هش، ابتدا باید دادهها را به بایت (Encode) تبدیل کنید. الگوریتم SHA-256 به دلیل امنیت بالا استاندارد امروزی است.
# Example 2: One-liner syntax (Static Snippet)
import hashlib
print(hashlib.sha256(b"Hello").hexdigest())
۲. تفاوت الگوریتمها (MD5 vs SHA)
اگرچه MD5 سریع است، اما به دلیل ضعفهای امنیتی (Collision) دیگر برای رمزنگاری استفاده نمیشود و فقط برای چکسام (Checksum) فایلها کاربرد دارد.
سطح پیشرفته (Professional Level)
در سطح حرفهای، هشینگ برای ذخیره پسوردها، تایید صحت فایلهای حجیم و امضای دیجیتال (HMAC) استفاده میشود. استفاده از secrets برای تولید Salt و جلوگیری از حملات Rainbow Table حیاتی است.
۱. هش کردن فایلهای حجیم (Chunking)
برای فایلهای بزرگ (مثلاً چند گیگابایت)، نباید کل فایل را در رم بارگذاری کنید. باید فایل را تکه-تکه (Chunk) بخوانید و هش را آپدیت کنید.
# Example 4: Efficient File Hashing (Static)
import hashlib
def get_file_hash(filepath):
sha256 = hashlib.sha256()
# Read file in 4KB chunks
with open(filepath, 'rb') as f:
while chunk := f.read(4096):
sha256.update(chunk)
return sha256.hexdigest()
۲. امنیت پسورد و Salt (استفاده از secrets)
ذخیره هش خالی پسورد خطرناک است. باید به آن Salt (داده تصادفی) اضافه کنید. همچنین برای مقایسه هشها از compare_digest استفاده کنید تا از حملات زمانی (Timing Attacks) جلوگیری شود.
۳. اعتبارسنجی پیام با HMAC
برای اطمینان از اینکه پیام در حین انتقال تغییر نکرده و توسط فرستنده معتبر ارسال شده است، از hmac استفاده میشود.