مكتبة hashlib في بايثون
هي مكتبة تمكننا من معرفة انواع الهاش الذي تُستخدم في الـ security, في الأخص في تطبيقات الويب و هذا كان مثال بسيط أنه لما نأتي لتخزين بيانات مثل باسورد أو بيانات حساسة نعمل لها عملية تشفير hashing يعني تغيير الصيغة للبيانات و لا يمكن عمل عليه عملية عكسية, و العملية كلها تعود بالسكيورتي بحيث إذا ادخلنا String يخرج لنا hash, و الهاش لا يمكن عمل عملية لإرجاعه للكلمة الأصلية, لكن في موضوع آخر إسمه فك تشفير و مفتاح لفك التشفير و يتم إستخدم هجمة القوى الغاشمة brute-forse بهذا الأمر مع هذا النوع في بعض الأحيان يأتي بنتيجة و إحيانا لا.
سوف نتحدث فقط عن إستخدام المكتبة و التعريف بها, و نستدعي المكتبة اولاً ببداية البرنامج
import hashlib
و لها العديد من الوثائق و الأوامر الذي تستخدم معها للإطلاع عليها جميعها إضغط هنا ليتم تحويلك لرابط المكتبة و رؤية جميع ما يستخدم معها, مثلاً سوف نستخدم الأمر algorithms_guaranteed لرؤية الخوارزميات المستخدمة في التشفير.
امر algorithms_guaranteed
>>> import hashlib
>>> hashlib.algorithms_guaranteed
كما نلاحظ لقد عرض لنا جميع الخوارزميات المستخدمة في المكتبة.
امر algorithms_available
يمكننا هذا الأمر من معرفة الخوارزميات المتاحة
>>> import hashlib
>>> hashlib.algorithms_available
يمكن عمل حلقة for لمعرفة جميع انواع الهاش المتاحة بشكل منظم.
>>> import hashlib
>>> hashlib.algorithms_available
>>> for h in hashlib.algorithms_available:
print(h)
للبدء بعملية تشفير أي بيانات و نريد الحصول على تشفير لها, على سبيل المثال سوف اُشفر كلمة saja بتشفير md5 ثم طريقة العرض هي utf-8.
>>> import hashlib
>>> data = "saja"
>>> hasht = hashlib.new("md5")
>>> hasht.update(data.encode('utf-8'))
>>> hasht.hexdigest()
'f338090a40ae3f84f753a4877af34a05'
>>>
لتشفير الكلمة السابقة بكل الأنواع المتاحة دفعة واحدة
>>> import hashlib
>>> data = "saja"
>>> hasht = hashlib.new("md5")
>>> hasht.update(data.encode('utf-8'))
>>> for h in hashlib.algorithms_available:
hasht = hashlib.new("{0}".format(h))
hasht.update(b'saja')
print(hasht.hexdigest())
كما نلاحظ أنه قد شفرها لنا بعدة تشفيرات و أظهر خطأ و الخطأ يعني أن بعض التشفيرات تحتاج التشفير بها بمفردها لأنها تحتاج إلى length معين و تحتاج argument, و إذا نريد معرفة نوع الهاش الذي توقف عنده و ظهر الخطأ نستخدم كالتالي.
>>> import hashlib
>>> data = "saja"
>>> hasht = hashlib.new("md5")
>>> hasht.update(data.encode('utf-8'))
>>> for h in hashlib.algorithms_available:
hasht = hashlib.new("{0}".format(h))
hasht.update(b'saja')
print(h)
print(hasht.hexdigest())
كما نلاحظ أنه اعطانا التشفير الذي توقفت عنده المشكلة و إسمه shake_256 يعني يحتاج length ليشفر به.
إذا نريد أن نشفر بالتشفير الذي توقف عنده نقوم بإعطاءه طول كما يحتاج
>>> hasht = hashlib.new("shake_256")
>>> hasht.update(b'saja')
>>> hasht.hexdigest(15)
كما نلاحظ أنه تم التشفير فهذا يعني فهو متغير حسب الطول الذي نعطيه له, إذا اعطيناه 5 سيعطينا هاش طول 5 و إذا 10 كذلك الأمر.
هذا كان بالنسبة لموضوع hashlib يعني إذا دخلنا لقاعدة بيانات موقع ما او تطبيق سوف نجد هاش او هاشات غير مفهومة لدينا و لا نعرف كيفية فك هذه البيانات للدخول للموقع, نبدأ بالدخول لبعض المواقع نجد بها السرعة عالية جداً و هذه المواقع يكون عملها عمل brute-forse للهاش الذي نعطيه لها.
مقالات ذات صلة
1-افضل المواقع و الأدوات لفك تشفير الهاش.
2-إنشاء سكربت للقيام بهجمة القوة العمياء Brute-force.
ليست هناك تعليقات:
إرسال تعليق