Implementation
RC6 規範中 base2 對數的概念
我正在閱讀這篇關於 RC6的論文,並且正式地,該算法是為任意字長定義的 $ w $ , 即使只有 $ w=32 $ 被考慮用於 AES 送出。現在論文明確提到了選擇 $ w=24 $ ,等等。後來在論文中,它說:
“以二為底的對數 $ w $ 將表示為 $ \operatorname{lg}w $ 。”
作為加密常式的一部分,執行以下步驟: $$ t = (B\times(2B+1)) \lll \operatorname{lg} w $$ 這對於 $ w=32 $ 作為 $ 32 $ 是二的冪並且 $ \operatorname{lg} w $ 將是一個整數,您可以通過它旋轉另一個整數。然而,對於 $ w=24 $ ,這正式要求我將值旋轉大約 $ 4.584962500721156 $ 位,我覺得相當令人費解。
我的問題是:什麼是正確的解釋 $ \operatorname{lg} w $ 對於允許其他值的 RC6 的實現 $ w $ , 特別是當 $ w $ 不是二的冪嗎*?*
來自多個塊大小的 RC6 和 RC5 測試向量(draft-krovetz-rc6-rc5-vectors-00)
/* Calculate floor(base-2 log of x) for any x>0. */ static int lg2(int x) { int ans=0; for ( ; x!=1; x>>=1) ans++; return ans; }
所以返回的是整數部分的LSB;
log_w = (unsigned int)log2(w);
在這裡測試一下,