【问题标题】:How are passwords and salts combined with MD5 in Java and Postgres SQL?Java 和 Postgres SQL 中的密码和盐如何与 MD5 结合?
【发布时间】: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


【解决方案1】:

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

您是否需要同时在 Java 和 SQL 中加密?

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-03
    • 2010-11-30
    • 2012-07-07
    • 2014-03-01
    • 2014-08-01
    • 2015-01-04
    • 2016-11-03
    • 2011-06-02
    相关资源
    最近更新 更多