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

标签 java c# 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

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/

相关文章:

Linux 上的 C# 服务器可伸缩性问题

c# - 从另一种形式调用变量 C#

java - 栅栏柱问题

java - 提取文件名的正则表达式?

java - 在 Oracle DB 表中存储字符串

java - Slf4j 自定义提供程序实现未被拾取

c# - System.IO.Stream 有接口(interface)吗?

android - 在不写入文件的情况下将视频录制到字节数组

java - 我可以使字节数组的大小动态化吗?

c# - 如何将字符串转换为 base64 字节数组,这有效吗?