代码之家  ›  专栏  ›  技术社区  ›  Andrew

将MD5数组转换为字符串java

  •  13
  • Andrew  · 技术社区  · 14 年前


    我当前正在使用MessageDigest,我正在执行以下操作以获取字符串

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


    提前谢谢!

    4 回复  |  直到 8 年前
        1
  •  12
  •   Jigar Joshi    8 年前
    MessageDigest md = MessageDigest.getInstance("MD5");
    byte[] arr = md.digest(bytesOfMessage);
    return Base64.getEncoder().encodeToString(arr);
    

    注意:md5不再被认为是好的散列算法,请考虑选择SHAs

        2
  •  16
  •   Bozho    14 年前

    commons-codec

    • 比较基准64- Base64.encodeBase64(digestBytes)
    • Hex.encodeHex(digestBytes)
        3
  •  5
  •   Grodriguez    11 年前
    // 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编码。这就是它通常的表现方式。

        4
  •  1
  •   Pau Kou    9 年前

    我看到了下一个解决方案:

        byte[] digest = md.digest(someDataByteArray);
        StringBuilder hex = new StringBuilder();
        for (byte b : digest) {
            hex.append(String.format("%02x", b));
        }
    
        5
  •  0
  •   WesternGun    5 年前
    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()