【发布时间】:2013-11-11 11:55:23
【问题描述】:
我已经编写了一个使用 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 个字符(任何你想要的。Avery 选择应该和其他任何选择一样好)
-
我需要像缩小/压缩哈希码这样的东西,而不是参与其中。 :)
-
@zulox,MD5 是一个加密哈希,没有必要专门缩小或压缩它,您可以只取前 8 个十六进制半字节或以其他方式取前缀。你不会赢得任何东西,例如通过对所有 8 个半字节块进行异或运算,不会增加安全性或随机性。
-
messageDigest.update(plainText.getBytes());如果您的平台的默认编码更改,这将不起作用。使用getBytes(StandardCharsets.UTF_8) -
8 个十六进制编码字符?
标签: java algorithm security md5 message-digest