0

我在使用带有 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。

谢谢!

4

1 回答 1

1

您可能有 2 种不同的字符编码(UTF-8、ISO-8859 等),这对于相同的加密会导致不同的结果。

是否有理由需要同时使用 Java 和 SQL 进行加密?

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

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

于 2013-09-16T18:54:17.063 回答