密码和盐如何与Java和Postgres SQL中的MD5结合使用?

时间:2013-09-16 18:23:49

标签: java postgresql md5 salt

我在使用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 +盐。

谢谢!

1 个答案:

答案 0 :(得分:1)

您可能有2种不同的字符编码(UTF-8,ISO-8859等),这会对同一加密产生不同的结果。

您是否需要在Java和SQL中进行加密?

为什么不在Java中进行加密,然后只使用SQL来存储加密?

如果必须更改数据库供应商并且新供应商要么以不同方式加密,要么根本不加密,使用SQL加密可能会出现问题。使用Java(或您正在使用的任何语言)进行加密可以控制加密的实现。这将实现可重复/一致的加密,并允许您在更新的加密算法出现时更改您的实现。