recent
أخبار ساخنة

التعرف على مكتبة hashlib و كيفية التعامل معها لتشفير البيانات في لغة بايثون PYTHON الدرس|28|

الصفحة الرئيسية


مكتبة 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.

3-التعرف على مكتبة subprocess.

4-مكتبة struct الشهيرة بـ sniffing فحص الشبكات.

google-playkhamsatmostaqltradent