gpt4 book ai didi

java - 通过 MessageDigest 了解 Java 中的哈希密码

转载 作者:搜寻专家 更新时间:2023-11-01 01:56:05 25 4
gpt4 key购买 nike

我正在创建一个简单的 Web 应用程序,并希望将散列密码存储到数据库中。我也需要身份验证 token 的哈希函数(将用户名和日期连接起来,并将它们与哈希一起作为 token 发送给客户端)。

我发现 MessageDigest Java 类可以帮助我解决这个问题。 Here is one link .基本思路是这样的:

public String digestString (String stringToHash) throws NoSuchAlgorithmException {
MessageDigest sha256 = MessageDigest.getInstance("SHA-256");
byte[] stringBytes = stringToHash.getBytes();
byte[] stringDigest = sha256.digest(stringBytes);
return new String(stringDigest);
}

我没有得到的是:在此代码中,如何设置哈希键?我需要确保在验证过程中使用相同的 key 。如果我不设置 key ,我该怎么办?

顺便说一句:我知道我应该在散列之前向散列文本添加盐(在本例中为 256 字节)。

最佳答案

散列不使用 key 。这只是一种单向算法。你给它一些东西来消化,它返回一个散列。它保证的是,很难找到原始输入或导致相同散列的任何其他输入。

您的算法有两个基本问题(除了缺少加盐):

  • 它使用 String.getBytes(),它依赖于默认的平台编码,因此因平台而异。您应该指定一种编码,例如 UTF-8。
  • 它使用 new String(byte[]),它有与上述相同的问题 + 一个额外的问题:所有字节序列都不是有效字符。要将纯二进制字节数组转换为字符串,请使用 base64 编码算法。 apache 通用代码有一个。

关于java - 通过 MessageDigest 了解 Java 中的哈希密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8731984/

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