【发布时间】:2013-09-21 00:00:02
【问题描述】:
我在使用带有 MD5 的盐时遇到了一些问题。我同时使用 SQL(使用 Postgres 9.2)和 Java,但我无法弄清楚 salt 和未加密密码是如何组合的。这是我正在使用的 Java 代码:
PasswordEncoder encoder = new Md5PasswordEncoder();
System.out.println(encoder.encodePassword("userP@ss", "My_$3cr3t-$4lT"));
结果如下:
fac5ed68dd60573a4eb90760f02f5f5c
但是当我使用 SQL 做同样的事情时:
insert into account (email_address, account_name, password, phone_number, enabled)
values ('user@freewheelers.com', 'UserCat', md5(CONCAT('userP@ss','My_$3cr3t-$4lT')), '', true);
结果如下:
c7d3665f9d5bebf959b0a890d0b75a9e
在这种情况下,能够使用 SQL 复制 Java 正在执行的操作非常重要,反之亦然。有谁知道 SQL 和 Java 是如何结合密码和盐的?
另外,我知道我应该使用 BCrypt 或其他算法,但在这种情况下,必须使用 MD5 + salt。
谢谢!
【问题讨论】:
-
你真的不应该使用 MD5 来散列密码。没有借口。
-
向我们展示
Md5PasswordEncoder#encodePassword()的实现 -
@SotiriosDelimanolis 它是 Spring 的一部分 (org.springframework.security.authentication.encoding.Md5PasswordEncoder)
-
密码开头的“U”是大写还是小写?您在每次通话中都有不同的设置。
-
@splunebob 很抱歉。我编辑了它。问题依旧。
标签: java postgresql md5 salt