基本上我的目标是使用日期作为盐密钥来加密我的密码。我正在使用 SHA-512 来执行此操作。当我加密我的密码时,我会捕获今天的日期,比如 varDate,它是一种java.util.Date
类型,然后进行加密。如果我这样做输出它varDate.toString()
,我会看到Thu Jul 18 17:37:27 SGT 2013
。然后在此之后varDate
将存储到数据库中。
解密时,我将提供我的密码并varDate
从数据库中查询,这也是java.util.Date
类型,加密并进行比较。有趣的是,这总是会失败,因为加密的值永远不会匹配。我发现当我输出varDate
来自 DB 的2013-07-18 17:37:27.0
.
我是如此惊讶,如此好奇和挣扎,为什么会发生这种情况?我想知道这是否是导致加密失败的根本原因?
2013 年 7 月 23 日更新
这是为了说明代码如何在我的哈希算法上工作。我有一个函数接受密码作为字符串,盐键作为字符串,然后像这样对密码进行散列:
MessageDigest md = MessageDigest.getInstance("SHA-512");
md.reset();
md.update(saltKey.getBytes());
md.digest(password.getBytes("UTF-8"));
我的实验表明,通过传入 Date 对象,我无法得到一致的结果。但是,如果我将其重新格式化为字符串,那么只有我会得到一致的结果。在我看来,日期对象不是一个好的盐键候选者。