gpt4 book ai didi

java - 为什么数据库中的日期永远不会与 new Date() 格式相同?

转载 作者:行者123 更新时间:2023-12-01 23:42:14 25 4
gpt4 key购买 nike

基本上我的目标是使用日期作为盐 key 来加密我的密码。我使用 SHA-512 来执行此操作。当我加密密码时,我捕获今天的日期,例如 varDate,它是 java.util.Date 类型,然后进行加密。如果我通过执行 varDate.toString() 来输出它,我将看到 Thu Jul 18 17:37:27 SGT 2013。然后在此之后 varDate 将被存储到数据库中。

解密时,我将提供我的密码并从数据库查询varDate,它也是java.util.Date类型,对其进行加密并执行以下操作比较。有趣的是,这总是会失败,因为加密的值永远不会匹配。我发现当我输出来自数据库的 varDate 时,其格式为 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 对象,我无法得到一致的结果。但如果我将其重新格式化为字符串,那么只有我才能得到一致的结果。在我看来,日期对象并不是一个好的盐键候选者。

最佳答案

您不应该使用Date.toString()。它的输出取决于日期的实际具体类型,可能是 java.util.Date (可能是您的第一种情况),java.sql.Timestamp (您的第二个情况)大概是这种情况)或 java.sql.Date。它还取决于当前时区。

我的建议是完全忘记使用枣子作为盐。使用 SecureRandom 生成随机盐,并将该盐存储在数据库中。

如果您确实坚持使用日期,请使用可靠的机制将其转换为字符串,例如具有固定模式和 UTC 时区的 SimpleDateFormat

关于java - 为什么数据库中的日期永远不会与 new Date() 格式相同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17725090/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com