Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
密码块链接:Java中的XOR实现_Java_Cryptography_Xor_Cbc Mode - Fatal编程技术网

密码块链接:Java中的XOR实现

密码块链接:Java中的XOR实现,java,cryptography,xor,cbc-mode,Java,Cryptography,Xor,Cbc Mode,如何在Java中实现CBC(密码块链接)中的XOR? 我知道当我的两个值都是布尔值时该怎么做,但是如果我有数字而不是布尔值该怎么办 例如: i1 = 15 i2 = 4 如何使用short整数执行异或i1和i2?: short s1 = ... short s2 = ... short result = (short) (s1 ^ s2); 这是将两条短裤异或在一起最有效的方法。它不会产生创建大整数的开销,而且强制转换不会导致溢出问题,因为s1和s2都是短整数。使用短整数: short s1

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

例如:

i1 = 15
i2 = 4

如何使用
short
整数执行异或i1和i2?

short s1 = ...
short s2 = ...
short result = (short) (s1 ^ s2);

这是将两条短裤异或在一起最有效的方法。它不会产生创建大整数的开销,而且强制转换不会导致溢出问题,因为s1和s2都是短整数。

使用
短整数:

short s1 = ...
short s2 = ...
short result = (short) (s1 ^ s2);

这是将两条短裤异或在一起最有效的方法。它不会产生创建大整数的开销,强制转换也不会导致溢出问题,因为s1和s2都是短的。

Java内置了按位异或运算符,请参阅。XOR适用于所有基本整数类型(即直接代表您和我的数字的类型):
byte
short
int
long
char
。此异或运算符将对相同位置的位执行按位异或,然后输出结果。还有一个
^=
,它将结果存储回左侧变量中

现在,如果要对字节或32位整数(
int
)执行此操作,则取决于您的CBC实现。通常您会使用字节,但如果您使用32位构造实现了AES,那么您将使用整数。整数会稍微快一点,但无论如何,与分组密码操作相比,XOR所花费的时间将变得微不足道

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


当对两个字节的值使用异或操作时,您可能需要回溯到一个字节,因为Java会自动将操作数(以及结果)上溯到32位整数(
int
):



字节在Java中是有符号的值,这意味着您可能会得到负值。不过没关系,只要只使用位操作,就可以忽略这个问题。它只在数学运算(如加法或乘法)中才重要。

Java内置了位异或运算符,请参阅。XOR适用于所有基本整数类型(即直接代表您和我的数字的类型):
byte
short
int
long
char
。此异或运算符将对相同位置的位执行按位异或,然后输出结果。还有一个
^=
,它将结果存储回左侧变量中

现在,如果要对字节或32位整数(
int
)执行此操作,则取决于您的CBC实现。通常您会使用字节,但如果您使用32位构造实现了AES,那么您将使用整数。整数会稍微快一点,但无论如何,与分组密码操作相比,XOR所花费的时间将变得微不足道

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


当对两个字节的值使用异或操作时,您可能需要回溯到一个字节,因为Java会自动将操作数(以及结果)上溯到32位整数(
int
):



字节在Java中是有符号的值,这意味着您可能会得到负值。不过没关系,只要只使用位操作,就可以忽略这个问题。它只在数学运算(如加法或乘法)中才重要。

可能重复yeah,但我不想对布尔进行异或运算。我想对数字进行异或运算:DIt可以处理布尔型和整数型。那么,使用
i1^i2
有什么问题吗?可能是重复的,但我不想对布尔型进行异或运算。我想用异或数:DIt处理布尔型和整数型。所以,使用
i1^i2
有什么问题?但是绝对没有理由使用短消息。但是绝对没有理由使用短消息。感谢转到指示您需要再次向下播放到字节或短消息。感谢转到指示您需要再次向下播放到字节或短消息。