C#无符号字节加密到Java有符号字节解密

C#无符号字节加密到Java有符号字节解密,第1张

C#无符号字节加密到Java有符号字节解密

尽管您不能在Java中使用无符号字节,但是您可以简单地忽略该问题。

AES和所有现代对称密码都以字节为单位,并且输入和输出已定义为字节(或八位位组)。输入和输出已通过NIST进行了标准化,并且可以使用测试向量。

如果查看字节的单独位内容,则

{200,201,202}
C#和
{(byte)200, (byte)201,(byte)202}
Java中的相同。这是因为Java使用字节的二补码表示。

将数字

200
作为整数:将以
11010000
二进制形式表示,
-56
如果用两个补数的(带符号)字节使用,则表示Java中的数字。现在,对称密码将简单地将这些位转换为另一个(通常使用完整的位
)。

找到答案后, 当您查看单独的位时 ,您会发现它们在C#和Java中都是相同的。但是,C#将把它们解释为无符号值,将Java解释为有符号值。

如果要打印或将这些值用作Java中的带符号数字,则必须将它们转换为带正符号的整数。做到这一点的方法是使用

int p = b & 0xFF

这将执行以下 *** 作(我将再次使用数字200):

  1. (负)字节值扩展为带符号的整数,记住符号位:

11010000
变成
11111111 11111111 11111111 11010000

  1. 使用
    0xFF
    00000000 00000000 00000000 11111111
    通过执行二进制AND运算符可“屏蔽”此值:

11111111 11111111 11111111 11010000 & 00000000 00000000 00000000 11111111 =00000000 00000000 00000000 11010000

该值与

200
带符号整数的值相同。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5562196.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-14
下一篇 2022-12-14

发表评论

登录后才能评论

评论列表(0条)

保存