هل تريد دمج (3) تجزئات سداسية مكونة من 32 حرفًا في تجزئة واحدة فريدة مكونة من 32 حرفًا؟

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

  •  14-11-2019
  •  | 
  •  

سؤال

لدي (3) md5sums أحتاج إلى دمجها في تجزئة واحدة.يجب أن يتكون التجزئة الجديد من 32 حرفًا، ولكنه حساس لحالة الأحرف ويمكن أن يكون أي حرف أو رقم.ما هي أفضل طريقة للقيام بذلك في بايثون؟

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

المحلول

سأبدأ بدمج تجزئات md5 في تجزئة واحدة.يمكنك استخدام SHA256 لأنه سيحتوي على المزيد من البايتات في النهاية:

>>> import hashlib
>>> combined = hashlib.sha256()
>>> combined.update(hashlib.md5('test1').digest())
>>> combined.update(hashlib.md5('test2').digest())
>>> combined.update(hashlib.md5('test3').digest())

بعد ذلك يمكنك استخدام base64 لتشفيره باستخدام الحروف والأرقام وبعض الرموز الإضافية:

>>> import base64
>>> base64.b64encode(combined.digest())
'PeFC3irNFx8fuzwjAz+fE/up9cz6xujs2Z06IH2GdUM='

إذا كنت تريد 32 حرفًا فقط، فقم بقص الأجزاء الأخيرة:

>>> base64.b64encode(combined.digest())[:32]
'PeFC3irNFx8fuzwjAz+fE/up9cz6xujs'

يمكن أن يحتوي هذا + و / بالإضافة إلى الحروف والأرقام التي يقترحها OP الخاص بك.إذا كنت تريد استبدالها، يمكنك استخدام المعلمة الثانية لتشفير b64:

>>> base64.b64encode(combined.digest(), altchars="AA")[:32]
'PeFC3irNFx8fuzwjAzAfEAup9cz6xujs'

نصائح أخرى

أسهل طريقة هي الجمع بين المبالغ الثلاثة في سلسلة واحدة من 96 حرفا وتشغيل MD5 Hash على ذلك.

giveacodicetagpre.

فقط بطريقة أخرى، باستخدام "الأحرف" تعني أي CodePoint Unicode، إليك ما توصلت إليه، بما في ذلك الردعات حولها: giveacodicetagpre.

ربما اضطررت إلى استخدام 13 بت لكل حرف لتجنب أي علامات ترقيم، لكنني لم أرغب في استثمار الوقت لأنك لم تهتم بإنعدادها على أي حال.

[لاحقا] كلا، لم يكن لديك: giveacodicetagpre.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top