我有一个java网应用程序使用弹簧的框架和春季安全登录。在我的数据库,我有我的密码加密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哈希?像以下类似的作品在Java中:

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”?

其他提示

我意识到这是有点晚了,但Spring有内置的类来实现这个轻松了许多。

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

    assertEquals("a564de63c2d0da68cf47586ee05984d7", hashedPass);
}

这是一个单元测试,我使用内置的Spring Security的代码写的,它比消息摘要码小了很多,因为你已经使用Spring Security的,你应该在你的classpath已经是类。

你有没有读 6.3.3散列和身份验证 部分从春天安全的参考手册?它提及一些可能的问题可能会遇到在使用密码哈希。

一些可能性,它列出:

  • 数据库的密码散可能在Base64,而结果从MD5PasswordEncoder是在十六的字符串
  • 你的密码散可能在上情况,而结果的编码是在较低的情况下串
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top