将MD5数组转换为String java

时间:2010-09-20 15:33:25

标签: java md5

我知道有很多类似的话题,但是......有人能为我提供一个生成MD5字符串的方法的工作示例。
我目前正在使用MessageDigest,我正在执行以下操作来获取字符串

sun.misc.BASE64Encoder().encode(messageDigest.digest())  

我想有更好的方法可以做到这一点 提前谢谢!

5 个答案:

答案 0 :(得分:16)

我会使用commons-codec

  • Base64 - Base64.encodeBase64(digestBytes)
  • 十六进制字符串 - Hex.encodeHex(digestBytes)

答案 1 :(得分:12)

MessageDigest md = MessageDigest.getInstance("MD5");
byte[] arr = md.digest(bytesOfMessage);
return Base64.getEncoder().encodeToString(arr);

注意:md5不再被认为是好的哈希算法,考虑选择SHA

答案 2 :(得分:4)

// 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();

这假设您实际上希望将MD5打印为十六进制字符串,而不是BASE64编码。这就是它通常表现的方式。

答案 3 :(得分:1)

我已经看过下一个解决方案:

    byte[] digest = md.digest(someDataByteArray);
    StringBuilder hex = new StringBuilder();
    for (byte b : digest) {
        hex.append(String.format("%02x", b));
    }

答案 4 :(得分:0)

import 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()