gpt4 book ai didi

java - 密码 block 链接 : XOR implementation in Java

转载 作者:行者123 更新时间:2023-12-01 17:57:09 24 4
gpt4 key购买 nike

如何在 Java 中实现 CBC(密码 block 链接)的异或?当我的两个值都是 boolean 值时,我知道该怎么做,但是如果我有数字而不是 boolean 值,我该怎么办?

例如:

i1 = 15
i2 = 4

如何异或 i1 和 i2?

最佳答案

Java 内置有按位异或运算符,请参阅 Java Language Specification 。 XOR 适用于所有原始整数类型(即直接代表你我的数字的类型):byteshortintlongchar。该异或运算符将对相同位置的位进行按位异或,然后输出结果。还有 ^= 会将结果存储回左侧变量中。

现在,如果您对字节或 32 位整数 (int) 执行此操作,则取决于您的 CBC 实现。通常您会使用字节,但如果您使用 32 位结构实现 AES,您将使用整数。整数会稍微快一些,但是 XOR 所花费的时间无论如何与分组密码操作相比都会显得苍白无力。

因此,您可以简单地使用一个 for 循环(最多以字节为单位的 block 大小),并在加密期间将最后一个密文的每个字节与下一个明文或最后一个密文与结果进行异或- 解密后 - 解密期间的下一个密文。

<小时/>

当对两个字节值使用 XOR 运算时,您可能需要转换回字节,因为 Java 会自动将操作数(以及结果)向上转换为 32 位整数 (int):

byte x = 0b0011; // 0b indicates a binary literal
byte y = 0b0101;
byte r = (byte) (x ^ y); // results in 0b0110 or the value 6 in decimals
<小时/>

字节在 Java 中是有符号的值,这意味着您可能会得到负值。不过没关系,只要您只使用按位运算,您就可以忽略这一点。它仅在加法或乘法等数学运算中才重要。

关于java - 密码 block 链接 : XOR implementation in Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43792216/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com