recent
أخبار ساخنة

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

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

مكتبة hashlib في بايثون

مكتبة hashlib أو ننطقها في اللغة العربية "هاش ليب" هي مكتبة تُمكننا من معرفة انواع الهاش الذي تُستخدم في الـ security.

وبالأخص في تطبيقات الويب و هذا كان مثال بسيط أنه لما نأتي لتخزين بيانات مثل باسورد Password أو بيانات حساسة نعمل لها عملية تشفير hashing.

يعني تغيير الصيغة للبيانات و لا يمكن عمل عليه عملية عكسية, و العملية كلها تعود في السكيورتي بحيث إذا أدخلنا String يخرج لنا hash.

والهاش لا يمكن عمل عملية لإرجاعه للكلمة الأصلية, لكن في موضوع آخر إسمه فك تشفير و مفتاح لفك التشفير.

و يتم إستخدم هجمة القوى الغاشمة brute-forse وبهذا الأمر مع هذا النوع في بعض الأحيان يأتي بنتيجة و إحيانا لا.

سوف نتحدث فقط عن إستخدام المكتبة و التعريف بها, و نستدعي المكتبة اولاً ببداية البرنامج بالأمر

import hashlib

و لها العديد من الوثائق و الأوامر التي تُستخدَم معها للإطلاع عليها جميعها إضغط هنا ليتم تحويلك لرابط المكتبة و رؤية جميع ما يستخدم معها.

مثلاً سوف نستخدم الأمر algorithms_guaranteed لرؤية الخوارزميات المستخدمة في التشفير.


امر algorithms_guaranteed في مكتبة hashlib

>>> import hashlib
>>> hashlib.algorithms_guaranteed
{'sha384', 'md5', 'sha512', 'sha256', 'sha3_224', 'blake2b', 'shake_128',
'sha3_512', 'shake_256', 'sha3_384', 'blake2s', 'sha3_256', 'sha1', 'sha224'}

كما نلاحظ لقد عرض لنا جميع الخوارزميات المستخدمة في المكتبة أي خوارزميات التي يمكن أن نشفر بها.


امر algorithms_available في مكتبة hashlib

يمكننا هذا الأمر من معرفة الخوارزميات المتاحة

>>> import hashlib
>>> hashlib.algorithms_available
{'md4', 'md5-sha1', 'sha512_224', 'blake2b', 'sha3_512', 'sha512_256',
'sha224', 'whirlpool', 'sha384', 'sha3_224', 'blake2s', 'md5', 'sha256',
'shake_128', 'sha3_384', 'sha3_256', 'sha1', 'sha512', 'ripemd160', 'sm3', 'shake_256'}
 

يمكن عمل حلقة for لمعرفة جميع انواع الهاش المتاحة بشكل منظم.

>>>import hashlib
>>>hashlib.algorithms_available
>>>for h in hashlib.algorithms_available:
    print(h)
#الناتج هو
md4
md5-sha1
sha512_224
blake2b
sha3_512
sha512_256
sha224
whirlpool
sha384
sha3_224
blake2s
md5
sha256
shake_128
sha3_384
sha3_256
sha1
sha512
ripemd160
sm3
shake_256
 

للبدء في عملية تشفير أي بيانات و نريد الحصول على تشفير لها, على سبيل المثال سوف اُشفر كلمة 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)
'0a95dbcffae7fcc47b6ea174fa5942'

كما نلاحظ أنه تم التشفير فهذا يعني فهو متغير حسب الطول الذي نعطيه له, إذا اعطيناه 5 سيعطينا هاش طول 5 و إذا 10 كذلك الأمر.

هذا كان بالنسبة لموضوع hashlib يعني إذا دخلنا لقاعدة بيانات موقع ما أو تطبيق سوف نجد هاش او هاشات غير مفهومة لدينا و لا نعرف كيفية فك هذه البيانات للدخول للموقع.

نبدأ بالدخول لبعض المواقع نجد بها السرعة عالية جداً و هذه المواقع يكون عملها عمل brute-forse للهاش الذي نعطيه لها.

google-playkhamsatmostaqltradent