Aes
RC6 兩個 32 位塊之間模 32 的整數運算
我是密碼學新手,我正在嘗試編寫 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)&0xffffffff
x
和的 32 位加法y
z = (x-y)&0xffffffff
32 位減法 x
減法y
z = (x*y)&0xffffffff
x
和的 32 位乘法y
`z = ((x<<(31&y)) (x>>(31&-y)))&0xffffffff`
uint32_t
在現代 C 或 C++ 中,使用在 header<stdint.h>
或中定義的類型的變數<cstdint>
,並可選擇刪除&0xffffffff
.在 Java 中,使用 類型的變數
int
,刪除&0xffffffff
,更改>>
為>>>
.