postfix + mysql encrypt () ، كيف تتحقق من كلمة المرور باستخدام ملح عشوائي؟
-
30-09-2019 - |
سؤال
لقد قمت بتطبيق خادم البريد الخاص بي كما تملي هنا.
إنه يعمل بشكل جيد تمامًا. تدور الفضول الخاص بي حول إدخال المستخدمين في قاعدة البيانات ومصادقةهم
ادارة:
INSERT INTO users (email, password) VALUES ('sales@example.com', ENCRYPT('password'));
سوف تعطي عدة مرات تجزئة مختلفة لكلمة المرور المشفرة حيث تستخدم الملح العشوائي. أي إذا قمت بإدخال sales@example.com ثلاث مرات مع نفس كلمة المرور ، فكل علامة تجزئة مختلفة ...
سؤالي في هذا هو ، كيف يمكن لخادم postfix مصادقة كلمة المرور عند تسجيل الدخول عبر عميل بريد؟
لا توجد مشكلة في كل ما في الأمر لأنها تعمل بشكل جيد ، وأكثر من ذلك فقط لإرضاء فضولي حتى أتمكن من فهم ما يجري خلف الكواليس تمامًا لمصادقة كلمة المرور المشفرة بشكل صحيح.
المحلول
اقرأ رجل سرداب: إنه يعيد الملح في أول اثنين من قيمة العائد.
لذلك لم يتم فقد الملح ، يمكنك مقارنة السلسلة المشفرة بنتيجة crypt ('pass' ، $ first_two_chars_of_encrypted_value).
نصائح أخرى
يقارن PostFix كلمة المرور من قاعدة البيانات إلى تشفير جديد يتم مع الملح (كلمة المرور من DB).
لتشفير:
update user set password = ENCRYPT('1234') where id = 1
للتحقق من كلمة المرور:
SELECT u.* FROM user u where u.email ='admin@dominio.com'
and ENCRYPT('1234', u.password) = u.password
يجب أن تستخدم Encrypt ("Pass" ، "Salt") لإجبار الملح ، وإلا فإن الملح يضيع إلى الأبد وليس لديك طريقة لاسترداده. وظيفة لا معنى لها إلى حد ما بدونها. إنها وظيفة فظيعة للاستخدام ، لأن الأمن ضئيل للغاية ؛ استخدم Password () أو Old_Password () بدلاً من ذلك.
يستخدم Encrypt () نظام Crypt () ، الذي قد يستخدم جميع الأحرف الثمانية الأولى أو فقط ، قابلة للطباعة 7 بت ، يستخدم بشكل عام جولة واحدة من التجزئة المستندة إلى DES ، وهي غير قابلة للضغط تمامًا. تجنبه.