postfix + mysql encrypt () ، كيف تتحقق من كلمة المرور باستخدام ملح عشوائي؟

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

سؤال

لقد قمت بتطبيق خادم البريد الخاص بي كما تملي هنا.

إنه يعمل بشكل جيد تمامًا. تدور الفضول الخاص بي حول إدخال المستخدمين في قاعدة البيانات ومصادقةهم

ادارة:

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 ، وهي غير قابلة للضغط تمامًا. تجنبه.

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