TLDR:Java 是已签名,c# 是未签名。 Byte[]
值不同,如何解决。如何将任一侧转换为另一侧?
值是 "Hello World"
MD5
散列然后转换为 bytes
Java:
-79, 10, -115, -79, 100, -32, 117, 65, 5, -73, -87, -101, -25, 46, 63, -27
C#:
177, 10, 141, 177, 100, 224, 117, 65, 5, 183, 169, 155, 231, 46, 63, 229
我使用 byte[]
在两侧使用 AES
进行加密,但密码永远不匹配。
最佳答案
字节具有相同的值,只是打印方式不同。
如果你想确保具有负值的字节显示为正数,请添加 256 并取模 256,如下所示:
for (byte b : byteArray) {
int n = (b + 256) % 256;
System.out.println(n);
}
类似地,如果您想将大于 128 的值放入正确的字节范围内,您可以将它们转换为截断高位字节并获得负值,或者如果您愿意,您可以减去 256:
for (int n : byteValuesAsInt) {
byte b1 = (byte)n;
byte b2 = n >= 128 ? n-256 : n;
}
关于java - 如何在 C# 和 Java 中获得相同的 byte[],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37411274/