سؤال

لدي تطبيق ويب جافا يستخدم إطار الربيع وأمن الربيع لتسجيل الدخول الخاص به.في قاعدة البيانات الخاصة بي، قمت بتشفير كلمات المرور الخاصة بي إلى MD5 قبل حفظها.لقد أضفت هذه الرموز في application-config.xml الخاص بي

 <security:authentication-provider>
<security:password-encoder hash="md5"/>
<security:jdbc-user-service
        data-source-ref="dataSource"
        users-by-username-query="select user_name username, user_password password, 1 enabled from users where user_name=?"
        authorities-by-username-query="select username, authority from authorities where username=?" />
</security:authentication-provider>

في البداية كان يعمل عندما لم تكن كلمة المرور في قاعدة البيانات مشفرة.ولكن عندما قمت بتشفيره وأضفت هذا المقتطف في تكوين التطبيق الخاص بي

      <security:password-encoder hash="md5"/>

أنا غير قادر على تسجيل الدخول.

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

المحلول

وكيف حالك خلق تجزئات MD5 الخاصة بك؟ شيء من هذا القبيل ما يلي يعمل بشكل جيد في جاوة:

MessageDigest messageDigest = MessageDigest.getInstance("MD5");  
messageDigest.update(user.getPassword().getBytes(),0, user.getPassword().length());  
String hashedPass = new BigInteger(1,messageDigest.digest()).toString(16);  
if (hashedPass.length() < 32) {
   hashedPass = "0" + hashedPass; 
}

وعند ترميز "كوال" لم تحصل "a564de63c2d0da68cf47586ee05984d7"؟

نصائح أخرى

وأنا أدرك أن هذا هو وقت متأخر قليلا، ولكن الربيع ديه الطبقات المدمج في أن يجعل هذا أسهل كثيرا.

@Test
public void testSpringEncoder() {
    PasswordEncoder encoder = new Md5PasswordEncoder();
    String hashedPass = encoder.encodePassword("koala", null);

    assertEquals("a564de63c2d0da68cf47586ee05984d7", hashedPass);
}

وهذا هو اختبار الوحدة التي كتبت باستخدام المدمج في قانون الأمن الربيع، فهو أصغر بكثير من MessageDigest رمز ومنذ كنت تستخدم أمان الربيع بالفعل، يجب أن يكون الفئات في CLASSPATH الخاص بك بالفعل.

هل قرأت 6.3.3 التجزئة والمصادقة قسم من الدليل المرجعي لـ Spring Security؟لقد ذكر بعض المشكلات المحتملة التي قد تواجهها عند استخدام تجزئة كلمة المرور.

بعض الاحتمالات التي ذكرتها:

  • قد تكون تجزئة كلمة مرور قاعدة البيانات في Base64، بينما تكون النتيجة من MD5PasswordEncoder في سلاسل سداسية عشرية
  • قد تكون تجزئة كلمة المرور الخاصة بك بأحرف كبيرة، بينما تكون النتيجة من برنامج التشفير بسلاسل صغيرة
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top