gpt4 book ai didi

java - 是否可以将哈希码限制为Java中的特定字符数

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:12:52 24 4
gpt4 key购买 nike

我已经编写了一种使用 MD5 算法将纯文本转换为其哈希码的方法。请在下面找到我使用的代码。

public static String convertToMD5Hash(final String plainText){
MessageDigest messageDigest = null;

try {
messageDigest = MessageDigest.getInstance("MD5");
} catch (NoSuchAlgorithmException e) {
LOGGER.warn("For some wierd reason the MD5 algorithm was not found.", e);
}

messageDigest.reset();
messageDigest.update(plainText.getBytes());
final byte[] digest = messageDigest.digest();
final BigInteger bigInt = new BigInteger(1, digest);
String hashtext = bigInt.toString(8);

return hashtext;
}

此方法非常有效,但它会返回一个冗长的散列。我需要将此散列文本限制为 8 个字符。有没有可能在 Java 中设置哈希码的长度?

最佳答案

是和否。如果您总是将原始哈希字符串相似地剪切(即最后/第 8 个字符),则可以使用原始哈希的子字符串。你打算用那个“半哈希”做什么是另一回事。

无论您要做什么,请确保它与安全无关。

原因如下:MD5 是 128 位哈希,因此有 2^128 = ~340,000,000,000,000,000,000,000,000,000,000,000,000 种可能的排列。相当天文数字的排列使得暴力破解这种字符串几乎是不可能的。通过减少到 8 个字符,您将得到 32 位散列。这是因为单个十六进制值需要 4 位来表示(因此,也是 128 位/4 位 = 32 个十六进制值)。对于 32 位哈希,只有 2^32 = 4,294,967,296 种组合。这比原来的 128 位散列的安全性低大约 79,228,162,514,264,337,593,543,950,336 倍,并且可以用任何具有 80 年代计算器处理能力的旧计算机在几秒钟内破解。

关于java - 是否可以将哈希码限制为Java中的特定字符数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19905732/

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