JavaでCBC(Cipher Block Chaining)からXORを実装する方法は? 私は両方の値がブール値であるときにそれを行う方法を知っていますが、ブール値ではなく数値がある場合はどうしますか?例についてはCipher Block Chaining:JavaでのXOR実装
:
i1 = 15
i2 = 4
I XOR
I1とI2はどうすればよいですか? short
整数使っ
JavaでCBC(Cipher Block Chaining)からXORを実装する方法は? 私は両方の値がブール値であるときにそれを行う方法を知っていますが、ブール値ではなく数値がある場合はどうしますか?例についてはCipher Block Chaining:JavaでのXOR実装
:
i1 = 15
i2 = 4
I XOR
I1とI2はどうすればよいですか? short
整数使っ
Javaにはビット単位のXOR演算子が組み込まれています(Java Language Specificationを参照)。 XORは、すべての基本積分型(つまり、あなたと私の数値を直接表す型)、つまりbyte
,short
,int
,long
およびに対応しています。このXOR演算子は、同じ位置のビットのXORをビットごとに行い、その結果を出力します。 ^=
もあり、結果を左側の変数に保存します。
これは、バイトまたは32ビット整数(int
)でこれを行う場合、CBCの実装に依存します。通常はバイトを使用しますが、32ビット構造を使用してAESを実装した場合は、整数を使用します。整数はやや速くなりますが、XORがかかる時間はブロック暗号操作と比較して淡くなります。
したがって、暗号化中に最後の暗号文の各バイトと各バイトをXORするか、暗号化中の最後の暗号文とその結果(復号化後)をXORするだけです解読中に次の暗号文。
あなたはJavaは自動的にオペランドをupcastsとして、2つのバイト値のXOR演算を使用している場合、バイトにキャストバックする必要があるかもしれない - そのため結果 - 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で「排他的論理和または」オペレーターの作成]の
バイトまたはショーツに再度ダウンキャストする必要があることを示すために[Ammar](http://stackoverflow.com/a/43792996/589259)に行ってください。 –
:
short s1 = ...
short s2 = ...
short result = (short) (s1^s2);
これは、2つのショートパンツをXORするための最も効率的な方法です。 BigIntegerを作成するオーバーヘッドに陥ることはなく、s1とs2の両方が最初から短くなっているため、キャストでオーバーフローの問題が発生することはありません。
ただし、ショーツを使用する理由は絶対にありません。 –
可能な複製(http://stackoverflow.com/questions/726652/creating-a-logical-exclusive-or-operator-in-java) –
ええけど私はXORブール値にしたくない。私はXORの数値にしたい:D – sunnyboy4205
それはブール型と整数型で動作します。 –