java中md5哈希缺少零

java中md5哈希缺少零,java,md5,Java,Md5,当我用java在md5中加密某些东西时,它会从散列中删除所有0,这对我来说是不好的,因为它不适用于php,因为php不会删除0。有没有办法修复它(除了让php也删除0s之外)。以下是我的java代码: public String getMd5Hash(String str) { try { byte[] array = MessageDigest.getInstance("MD5").digest(str.getBytes()); StringBuffer

当我用java在md5中加密某些东西时,它会从散列中删除所有0,这对我来说是不好的,因为它不适用于php,因为php不会删除0。有没有办法修复它(除了让php也删除0s之外)。以下是我的java代码:

public String getMd5Hash(String str) {
    try {
        byte[] array = MessageDigest.getInstance("MD5").digest(str.getBytes());
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < array.length; ++i) {
            sb.append(Integer.toHexString((array[i] & 0xFF) | 0x100).substring(1,3));
        }
        return sb.toString();
    } catch (NoSuchAlgorithmException e) {
        throw new IllegalStateException("Something went really wrong.");
    }
    return null;
}
公共字符串getMd5Hash(字符串str){
试一试{
字节[]数组=MessageDigest.getInstance(“MD5”).digest(str.getBytes());
StringBuffer sb=新的StringBuffer();
对于(int i=0;i
Integer.toHexString不会将零前置到您隐式期望的长度。使用带有“%02x”格式字符串的java.util.Formatter类将十六进制数字转换为所需的格式

下面的代码演示了这个问题

import java.util.Formatter;

public class TestHex {

    public static final void main(String[]  args) {
        StringBuilder sb = new StringBuilder();
        Formatter formatter = new Formatter(sb);
        byte[] testbytes = {-127, 4, 64, -4};

        for (int i=0; i<testbytes.length; i++) {
            byte b = testbytes[i];
            System.out.printf("%s\t%s\n", formatter.format("%02x", b), Integer.toHexString(b & 0xff));
            sb.setLength(0);
        }
    }
}

请注意第二行,其中Integer.toHexString仅返回“4”,格式化程序会提供所需的两位数字。

您能否给出一个这样会产生错误输出的示例?这是否只是一个填充问题(例如,前导零被删除)?如果是这样的话,MD5散列就其包含的位数而言不总是相同的长度吗?如果是这样的话,你就不能在结果的左边加上零,使其达到这个长度吗?这不是问题所在。
|0x100
确保数字将有3位数字。
81      81
04      4
40      40
fc      fc