هل هناك علامات عامة كبيرة باستخدام إصدارات مختلفة من Sha Hashing (وحدة Hashlib)

StackOverflow https://stackoverflow.com/questions/2241013

  •  19-09-2019
  •  | 
  •  

سؤال

ال hashlib يوفر Python Module منشورات خوارزميات التجزئة التالية: md5(), sha1(), sha224(), sha256(), sha384(), ، و sha512().

على افتراض أنني لا أريد استخدام MD5، هل هناك فرق كبير في الاستخدام، قل، Sha1 بدلا من sha512؟ أريد استخدام شيء مثل hashlib.shaXXX(hashString).hexdigest(), ولكن كما هو الحال بالنسبة للتخزين المؤكدة، لست متأكدا من أنني بحاجة إلى (في نهاية المطاف) النفقات الزائدة من 512 ...

هل هذه الوحدة العامة موجودة، وإذا كان الأمر كذلك، كم هو كبير؟

هل كانت مفيدة؟

المحلول

لماذا لا تقيسها فقط؟

>>> def sha1(s):
...     return hashlib.sha1(s).hexdigest()
...
>>> def sha512(s):
...     return hashlib.sha512(s).hexdigest()
...
>>> t1 = timeit.Timer("sha1('asdf' * 100)", "from __main__ import sha1")
>>> t512 = timeit.Timer("sha512('asdf' * 100)", "from __main__ import sha512")
>>> t1.timeit()
3.2463729381561279
>>> t512.timeit()
6.5079669952392578

لذلك على الجهاز الخاص بي، hash512 هو ضعف بطيئة مثل sha1. وبعد ولكن كما جريجس قال، لماذا تستخدم التجزئة الآمنة للتخزين المؤقت؟ جرب خوارزميات التجزئة المدمجة التي يجب أن تكون سريعة وضبط:

>>> s = "asdf"
>>> hash(s)
-618826466
>>> s = "xxx"
>>> hash(s)
943435
>>> hash("xxx")
943435

أو أفضل حتى الآن، استخدم قواميس بيثون المدمجة. ربما يمكنك أن تخبرنا المزيد عن ما تخطط له على التخزين المؤقت.

تعديل:أنا أفكر أنك تحاول تحقيق شيء مثل هذا:

hash = hashlib.sha1(object_to_cache_as_string).hexdigest()
cache[hash] = object_to_cache

ما كنت قد قمت بإعادة تدويره عن طريق "استخدام dictinaries Python المدمجة" هو أنه يمكنك تبسيط ما سبق:

cache[object_to_cache_as_string] = object_to_cache

وبهذه الطريقة، تعتني بيثون بالجذار حتى لا تضطر إلى ذلك!

فيما يتعلق بمشكلتك الخاصة، يمكنك الرجوع إلى بيثون هشاشة DICTS. من أجل جعل القاموس havable. ثم، كل ما تحتاجه للقيام به لذاكرة التخزين المؤقت للكائن هو:

cache[object_to_cache] = object_to_cache

نصائح أخرى

ربما اختبار ساذج ... ولكن يبدو أنه يعتمد على مقدار التجزئة. 2 كتل من SHA512 أسرع من 4 كتل من SHA256؟

>>> import timeit
>>> import hashlib
>>> for sha in [ x for x in dir(hashlib) if x.startswith('sha') ]:
...   t = timeit.Timer("hashlib.%s(data).hexdigest()" % sha,"import hashlib; data=open('/dev/urandom','r').read(1024)")
...   print sha + "\t" + repr(t.timeit(1000))
...
sha1    0.0084478855133056641
sha224  0.034898042678833008
sha256  0.034902095794677734
sha384  0.01980900764465332
sha512  0.019846916198730469
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top