java如何获取未调整的md5哈希

kum*_*mar 0 java md5

我正在使用消费ac #web服务,其中一个参数是发送md5哈希.Java使用signed创建MD5哈希(在字节数组中包含负数),C#生成无符号(在字节数组中不包含负数).

我在stackoverflow中经历了多个类似的问题,但没有找到任何让我满意的.

我需要的是无符号字节数组,类似于c#生成的那个.我已经尝试过使用BigInteger,但我需要它在无符号字节数组中,因为我需要在此之后进行进一步处理.BigInteger给了我一个整数,使用tobytearray()仍然有负数.

如果我必须做2补充至少可以请一些请告诉我如何做到这一点.然后我可以遍历字节数组并将负数转换为正数.

请尽快帮忙

我使用以下java代码生成MD5哈希

    String text = "abc";
    MessageDigest md = MessageDigest.getInstance("MD5");
    byte[] md5hash = new byte[32];
    try {
        md.update(text.getBytes("utf-8"), 0, text.length());
    } catch (UnsupportedEncodingException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    md5hash = md.digest();  
Run Code Online (Sandbox Code Playgroud)

JB *_*zet 5

Java字节是带符号的数字,但这仅表示当将字节(8位序列)视为数字时,Java将其中一个位视为符号位,而其他语言将相同的位序列视为符号位.无符号数,不包含符号位.

MD5算法是一种二进制算法,它将比特(或字节)序列转换为另一个比特(或字节)序列.Java的方式与任何其他语言的方式相同.只有在将字节显示为数字时,才会获得不同的输出,具体取决于语言将字节转换为数字的方式.

所以简短的回答是,将使用Java生成的MD5哈希发送到C#程序,它将正常工作.

如果要将Java中的字节数组显示为无符号数,请使用以下代码:

for (byte b : bytes) {
    System.out.println(b & 0xFF);
}
Run Code Online (Sandbox Code Playgroud)