سؤال

لقد كنت أبحث من خلال وثائق hashlib ths لكنني لم أجد أي شيء يتحدث عن استخدامه ملح متى التجزئة بيانات.

ستكون المساعدة رائعة.

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

المحلول

إجابة سمير صحيحة ولكنها خفية إلى حد ما. في الأساس ، يكون الملح مجرد جزء مشتق عشوائيًا من البيانات التي تقوم ببادؤها أو postfix بياناتك لزيادة تعقيد هجوم القاموس بشكل كبير على قيمة التجزئة. لذلك بالنظر إلى الملح s والبيانات d يمكنك فقط القيام بما يلي لإنشاء تجزئة مملحة للبيانات:

import hashlib
hashlib.sha512( s + d ).hexdigest()

انظر الى هذا مقال ويكيبيديا لمزيد من التفاصيل

نصائح أخرى

فقط أضف الملح إلى بياناتك الحساسة:

>>> import hashlib
>>> m = hashlib.sha512()
>>> m.update('salt')
>>> m.update('sensitive data')
>>> m.hexdigest()
'70197a4d3a5cd29b62d4239007b1c5c3c0009d42d190308fd855fc459b107f40a03bd427cb6d87de18911f21ae9fdfc24dadb0163741559719669c7668d7d587'
>>> n = hashlib.sha512()
>>> n.update('%ssensitive data' % 'salt')
>>> n.hexdigest()
'70197a4d3a5cd29b62d4239007b1c5c3c0009d42d190308fd855fc459b107f40a03bd427cb6d87de18911f21ae9fdfc24dadb0163741559719669c7668d7d587'
>>> hashlib.sha512('salt' + 'sensitive data').hexdigest()
'70197a4d3a5cd29b62d4239007b1c5c3c0009d42d190308fd855fc459b107f40a03bd427cb6d87de18911f21ae9fdfc24dadb0163741559719669c7668d7d587'

Salting ليست عملية سحرية تحتاج المكتبة لمساعدتك عليها - إنها مجرد بيانات إضافية مقدمة لإيقاف جداول قوس قزح من العمل.

>>> import hashlib
>>> m = hashlib.sha512()
>>> m.update(b"Nobody inspects")
>>> m.update(b" the spammish repetition")
>>> m.digest()
b'\xd0\xf4\xc1LH\xadH7\x90^\xa7R\x0c\xc4\xafp\x0fd3\xce\t\x85\xe6\xbb\x87\xb6\xb4a|\xb9D\xab\xf8\x14\xbdS\x96M\xdb\xf5[A\xe5\x81+:\xfe\x90\x89\x0c\nM\xb7\\\xb0Cg\xe19\xfdb\xea\xb2\xe1'
>>> m.update(b"My super-secret salt.")
>>> m.digest()
b'\xcd\xd7K\xd9!~\xa8\x1d6\x9b\xa6\xde\x06\t\x02\xa1+}\xaeNA\x94a`\xaa\xf4\xe9\xb5\xff\x1f\x9cE\x84m\xbb\x98U\xb4z\x92\x9e\xe8\xc9\xc2\xc8\x8f\x068e\xb0\r\xed\xb7\xde\x80\xa6,\n\x111w{\xa2\x9b'

إذا كنت تبحث عن بديل لـ Crypt () ، فإن إصدارات أحدث من GLIBC لديها "6 دولارات" قائمة على SHA-512 مع عدد التكرار المتغير (انظر صفحة أولريش دريبر, ، الذي لديه وصف وروابط إلى تنفيذ C كامل لـ sha512_crypt_r()).

كتابة التشفير الخاصة بك أمر غير منزعج للغاية - ما سبق sha512(salt+password) لا يساعد ضد هجوم القوة الغاشمة.

لتوليد الملح ، استخدم شيئًا مثل os.urandom(16) للبايت العشوائي أو ''.join(map(lambda x:'./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'[ord(x)%64], os.urandom(16))) للحصول على base64 aries chars (للاستخدام مع crypt ()-alikes).

(أقول base64-تشبه الأمر ليس هو نفسه base64 في PEM/MIME.)

استخدم Passlib ، وكتابة كلمة المرور الخاصة بك هي طريقة مؤكدة تقريبًا للفشل.

SHA512 ليست طريقة رائعة لتخزين كلمات مرور التجزئة هذه الأيام. يجب أن تستخدم bcrypt أو شيء مشابه. المهم هو أن التمليج مدمج وأن الخوارزمية لديها عامل عمل مهم.

إذا قمت بإلحاق كلمات مرور SHA512 الخاصة بك عن طريق إلحاق الملح (أو مسبق) بالملح إلى النص العادي ، أي شخص يحصل على مجموعة من كلمات المرور الخاصة بك ويطبق أداة تكسير حديثة (http://arstechnica.com/security/2013/05/how-crackers-make-minced-to-out-of-your-passwords/) سيكون قادرًا على رؤية قيمة كلمة المرور المتسلسلة+قيم الملح ، وربما تكون ، من خلال مطابقة الأنماط التافهة ، قادرة على فصل جزء كلمة المرور عن جزء الملح لمعظم الحسابات المعنية إن لم يكن كلها.

لم أفكر في هذا الأمر على طول الطريق ، وأنا لست خبيرًا في الأمان بأي حال من الأحوال ، لكن يبدو لي أنه إذا كنت تريد تشفير (باستخدام ، على سبيل المثال ، AES256) كلمة المرور باستخدام الملح كمفتاح ، و ثم التجزئة الذي - التي مع SHA512 ، ستكون في مأمن من الضعف الذي وصفته أعلاه.

ومع ذلك ، في هذه المرحلة ، بذلت جهداً أكثر مما كانت ستتخذه للتبديل إلى bcrypt وما زلت لا تملك حماية عامل العمل ، لذلك أوصي فقط بنهج مثل هذا إذا كنت البيئة العمل في لا يقدم هذا الخيار.

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