我知道有很多类似的主题,但是...能否有人提供一个生成MD5字符串的方法的工作示例。
我目前正在使用MessageDigest,并且我正在执行以下操作来获取一个字符串:
sun.misc.BASE64Encoder().encode(messageDigest.digest())
我猜应该有更好的方法来实现这个。提前感谢你!我知道有很多类似的主题,但是...能否有人提供一个生成MD5字符串的方法的工作示例。
我目前正在使用MessageDigest,并且我正在执行以下操作来获取一个字符串:
sun.misc.BASE64Encoder().encode(messageDigest.digest())
我猜应该有更好的方法来实现这个。提前感谢你!MessageDigest md = MessageDigest.getInstance("MD5");
byte[] arr = md.digest(bytesOfMessage);
return Base64.getEncoder().encodeToString(arr);
注意:MD5 不再被视为好的哈希算法,请考虑选择 SHA 算法。
我会使用 commons-codec
Base64.encodeBase64(digestBytes)
Hex.encodeHex(digestBytes)
// Convert to hex string
StringBuffer sb = new StringBuffer();
for (int i = 0; i < messageDigest.length; i++) {
if ((0xff & messageDigest[i]) < 0x10) {
sb.append('0');
}
sb.append(Integer.toHexString(0xff & messageDigest[i]));
}
String md5 = sb.toString();
我看到了下面的解决方案:
byte[] digest = md.digest(someDataByteArray);
StringBuilder hex = new StringBuilder();
for (byte b : digest) {
hex.append(String.format("%02x", b));
}
md5
程序得到的结果相同,而且非常清晰明了! - Marvinimport javax.xml.bind.DatatypeConverter;
import java.security.MessageDigest;
...
String input = "westerngun";
MessageDigest digest = MessageDigest.getInstance("MD5"); // not thread-safe, create instance for each thread
byte[] result = digest.digest(input.getBytes()); // get MD5 hash array, could contain negative
String hex = DatatypeConverter.printHexBinary(result).toLowerCase(); // convert byte array to hex string
Integer number = Integer.parseInt(hex, 16); // parse hex number to integer. If overflowed, use Long.parseLong()