我正在使用消费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)
Java字节是带符号的数字,但这仅表示当将字节(8位序列)视为数字时,Java将其中一个位视为符号位,而其他语言将相同的位序列视为符号位.无符号数,不包含符号位.
MD5算法是一种二进制算法,它将比特(或字节)序列转换为另一个比特(或字节)序列.Java的方式与任何其他语言的方式相同.只有在将字节显示为数字时,才会获得不同的输出,具体取决于语言将字节转换为数字的方式.
所以简短的回答是,将使用Java生成的MD5哈希发送到C#程序,它将正常工作.
如果要将Java中的字节数组显示为无符号数,请使用以下代码:
for (byte b : bytes) {
System.out.println(b & 0xFF);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1161 次 |
| 最近记录: |