【问题标题】:md5 output question mark charactersmd5输出问号字符
【发布时间】:2016-07-26 22:07:15
【问题描述】:

我想知道为什么我的字符串在 md5 传输后,输出 sth 包含许多不可读的字符,例如? 。ETC。在这种情况下,下面的代码输出 ��kh{��j��p%�.

import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;



public class Test{
    public static void main(String args[]){


        try{
            MessageDigest md = MessageDigest.getInstance("MD5");
            String ssmd5 = "sp00";
            String ShipmentID = new String(md.digest(ssmd5.getBytes()), StandardCharsets.UTF_8);
            System.out.println(ShipmentID);

        }catch(NoSuchAlgorithmException e){
            System.out.println("I'm sorry, but MD5 is not a valid message digest algorithm");
        }



    }
}

【问题讨论】:

  • MessageDigest.digest 返回一个byte[];您正在尝试将其转换为String,这在逻辑上是char[]charbyte 不是一回事。如果要将其打印为可读字符串,请使用 base64 对字节进行编码(或将字节打印为十六进制)。

标签: java hash md5 decode encode


【解决方案1】:

MD5 摘要函数的输出是一个二进制字节序列,而不是一个可打印的字符串。

无法打印原始 MD5 摘要。

如果要打印摘要的人类可读表示,则应将其打印为十六进制或 BASE64 编码字符串。

见:How to convert a byte array to a hex string in Java?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-30
    • 1970-01-01
    • 1970-01-01
    • 2019-02-19
    • 1970-01-01
    • 1970-01-01
    • 2018-03-03
    • 2017-01-10
    相关资源
    最近更新 更多