You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用MessageDigest计算byte数组SHA-256哈希值结果不符问题咨询

问题排查:SHA-256哈希结果不符的原因

看起来你遇到的核心问题是输入的字节数组和你预期的0xABCD并不匹配,咱们一步步理清楚:

  • 输入内容的本质差异
    你代码里的byte[] input = {0xA,0xB,0xC,0xD};代表的是四个独立的单字节值:十进制的10、11、12、13,对应的十六进制串是0A0B0C0D。而你提到的SHA256(0xABCD)里的0xABCD是两个连续的字节:0xAB(十进制171)和0xCD(十进制205),对应的十六进制串是ABCD——这两个输入完全不同,自然哈希结果也不一样。

  • 修改代码得到正确结果
    要生成你期望的哈希值,只需把输入数组改成对应0xABCD的两个字节即可。修改后的代码如下:

    byte[] input = {0xAB, 0xCD}; // 对应0xABCD的两个字节
    MessageDigest md = MessageDigest.getInstance("SHA-256");
    byte[] digest = md.digest(input);
    for(int i=0; i<digest.length; i++) {
        System.out.format("%x", digest[i] & 0xff);
    }
    

    运行这段代码就会输出你想要的结果:123d4c7ef2d1600a1b3a0f6addc60a10f05a3495c9409f2ecbf4cc095d000a6b。

  • 额外注意:字节序问题
    如果你的场景里0xABCD是一个16位整数(比如Java的short类型),需要留意字节序。Java默认使用大端序,所以(short)0xABCD转换为字节数组就是{0xAB, 0xCD},和上面的输入一致。如果是小端序环境,字节数组会变成{0xCD, 0xAB},哈希结果就会不同,但根据你给出的正确结果,显然是大端的情况。

内容的提问来源于stack exchange,提问作者M Ice

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:56:13