Aes

RC6 兩個 32 位塊之間模 32 的整數運算

  • September 17, 2021

我是密碼學新手,我正在嘗試編寫 RC6(Rivest cipher 6)算法。該算法需要模 2 32的加法、減法和乘法。如果我在兩個 32 位塊之間執行這些操作,這將如何工作?

任何幫助將不勝感激,因為我似乎找不到任何詳細的解釋,這將幫助我編寫有關如何執行這些操作的程式碼。

這將取決於您實現的語言。Java 和其他類似 C 的語言有一個內置的數據類型來表示無符號的 32 位整數(這就是 RC6 選擇使用這種算術形式的原因,因此它的實現在這些語言相對簡單)。在這種情況下 +、- 和 * 都會自動工作 mod $ 2^{32} $ .

如果您使用的是 python,您可以簡單地使用 % 運算符,它返回餘數 mod 指定的任何值,例如 a=(b+c)%(2**32)。

你想以模數工作 $ 2^{32} $ , 除了應該是模數的移位計數 $ 32 $ .

以下是通用的,適用於 Python。

程式碼(結果z手術
z = (x+y)&0xffffffffx和的 32 位加法y
z = (x-y)&0xffffffff32 位減法x減法y
z = (x*y)&0xffffffffx和的 32 位乘法y
`z = ((x<<(31&y))(x>>(31&-y)))&0xffffffff`

uint32_t在現代 C 或 C++ 中,使用在 header&lt;stdint.h&gt;或中定義的類型的變數&lt;cstdint&gt;,並可選擇刪除&0xffffffff.

在 Java 中,使用 類型的變數int,刪除&0xffffffff,更改&gt;&gt;&gt;&gt;&gt;.

引用自:https://crypto.stackexchange.com/questions/95116