如何在C#和Java中获得相同的byte []

use*_*557 4 c# java bytearray aes

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
Run Code Online (Sandbox Code Playgroud)

C#:

177, 10, 141, 177, 100, 224, 117, 65, 5, 183, 169, 155, 231, 46, 63, 229
Run Code Online (Sandbox Code Playgroud)

我使用双方byte[]加密AES,但密码永远不匹配.

das*_*ght 7

字节具有相同的值,它们的打印方式不同.

如果您想确保具有负值的字节显示为正数,请添加256并采用模256,如下所示:

for (byte b : byteArray) {
    int n = (b + 256) % 256;
    System.out.println(n);
}
Run Code Online (Sandbox Code Playgroud)

同样,如果您希望将值大于128的值放入正确的字节范围内,可以将它们转换为截断高位字节并获取负值,或者如果您愿意,可以减去256:

for (int n : byteValuesAsInt) {
    byte b1 = (byte)n;
    byte b2 = n >= 128 ? n-256 : n;
}
Run Code Online (Sandbox Code Playgroud)

  • 当然可以.只需将它们转换为一个字节.它是否以负数结尾是不相关的 - 字节表示是相同的. (3认同)