在密碼學中，RC5 是一種因簡潔著稱的對稱分組加密演算法。由羅納德李維斯特於 1994 年設計，RC 代表 Rivest Cipher，或者 Rons Code（相較於 RC2 和 RC4）。RC6 演算法是基於 RC5 的。 簡介 和許多加密方法不同，RC5 支援可變的塊大小 32、64 或 128 位元，金鑰長度（0 至 2040 位）和加密輪數（0～255）。最初建議選擇的引數是 64 位的塊大小，128 位的金鑰和 12 輪加密。 RC5 的一個關鍵特徵是使用基於資料的置換。RC5 的其中一個目標是促進對於這類作為原始密碼的操作的研究和評估。RC5 也包括一些的取模加法和邏輯異或 XOR 運算。這個加密的一般結構是一種類費斯妥網路。加密和解密程式可以用幾行程式碼寫完，但金鑰的生成演算法更復雜。金鑰擴充套件使用了 e 和黃金比例代入一個單向函式，將所得值作為 袖子裡是空的 數字（即無任何來源依據的魔法數字）。演算法的誘人的簡潔性和基於資料的置換的特性，讓 RC5 吸引了眾多密碼研究人員將其作為研究物件。 RC5 通常被記為 RC5wrb，w 字的大小（以 bit 為單位），r 加密輪數，b 金鑰的位元組數。 演算法 RC5 加密和解密都將隨機的金鑰擴充套件成 2 r1 個字，在加密和解密的過程中，這些字將會被按順序使用（而且每個字只使用一次）。以下的所有內容都來自 Rivest 的修訂後的 RC5 的論文 金鑰擴充套件 金鑰擴充套件演算法將會在下面講解，首先以偽程式碼表示，之後是用從參考資料中的論文附錄中直接複製的 C 語言程式碼。 以下是論文中的命名方案，使用了這些變數名： w 一個字的長度（以 bit 為單位，通常是 16、32 或 64。加密以兩個字為單位進行。 u＝w8 一個字的長度，以位元組為單位。 b 金鑰的長度，位元組為單位。 K 金鑰，可以看作是一個由位元組資料組成的陣列 下標從 0 開始。 c 金鑰的長度，以字為單位 如果 b0，取 1 L 一個在金鑰生成的臨時陣列，用來按字初始化金鑰 r 加密的輪數。 t2 r1 需要的輪加密的子金鑰個數。 S 偽隨機 S 陣列。 Pw 第一個魔法數字，定義為 Odd e 2 2w，其中 Odd 取最接近給定輸入的奇數，e 為自然對數的底數，w 見上述定義。對於常見的 w 值，對應的 Pw 在這裡以十六進位制給出： 對於 w 16 0xB7E1 對於 w 32 0xB7E15163 對於 w 64 0xB7E151628AED2A6B Qw 第二個魔法數字，定義為 Odd phi 1 2w 其中 Odd 取最接近給定輸入的奇數，phi 是黃金比例，w 見上述定義。對於共對於常見的 w 值，對應的 Pw 在這裡以十六進位制給出： 對於 w 160x9E37 對於 w 320x9E3779B9 對於 w 640x9E3779B97F4A7C15 Break K into words u w 8 c ceiling max b 1 u L is initially a clength list of 0valued wlength words for i b1 down to 0 do L iu L iu 8 K i Initialize keyindependent pseudorandom S array S is initially a t2 r1 length list of undefined wlength words S 0 P_w for i 1 to t1 do S i S i1 Q_w The main key scheduling loop i j 0 A B 0 do 3 max t c times A S i S i A B 3 B L j L j A B A B i i 1 t j j 1 c return S 例項原始碼由 Rivest 的 RC5 論文的附錄提供。這個程式碼實現對應 w 32 r 12 b 16。 void RC5_SETUP unsigned char K w 32 r 12 b 16 c max 1 ceil 8 bw t 2 r1 WORD i j k u w8 A B L c for i b1 L c1 0 i 1 i L iu L iu 8 K i for S 0 P i 1 i t i S i S i1 Q for A B i j k 0 k 3 t k i i1 t j j1 c A S i ROTL S i A B 3 B L j ROTL L j A B A B 加密 加密涉及的一個簡單的函式的幾輪加密。基於安全需要和時間方面的考慮，12 或 20 輪是建議的值。除了上述使用的變數，以下變數在演算法之中使用： A，B 要加密的明文的兩個字。 A A S 0 B B S 1 for i 1 to r do A A B B S 2 i B B A A S 2 i 1 The ciphertext block consists of the twoword wide block composed of A and B in that order return A B Rivest 給出的示例 C 原始碼如下 void RC5_ENCRYPT WORD pt WORD ct WORD i A pt 0 S 0 B pt 1 S 1 for i 1 i r i A ROTL A B B S 2i B ROTL B A A S 2i 1 ct 0 A ct 1 B 解密 解密實際上就是直接把加密過程顛倒。以下程式碼展示了這個過程。 for i r down to 1 do B B S 2 i 1 A A A A S 2 i B B B B S 1 A A S 0 return A B Rivest 給出的示例 C 原始碼如下。 void RC5_DECRYPT WORD ct WORD pt WORD i Bct 1 Act 0 for i r i 0 i B ROTR B S 2i 1 A A A ROTR A S 2i B B pt 1 B S 1 pt 0 A S 0 密碼分析 12 輪 RC5 64 位塊 容易受到使用了 244 的選定的明文的差分攻擊。Biryukov A 和 Kushilevitz E1998 年。改進的密碼分析的 RC5 的。EUROCRYPT1998 年。 1820 輪加密則被認為可以提供足夠的保護。 擁有其演算法專利的公司 RSA 安全，Rivest R L Block Encryption Algorithm With Data Dependent Rotation issued on 3 March 1998 提供一系列的 10000 美元的獎金作為破譯用 RC5 加密的密文的獎勵，但這些競賽已經在 2007 年 5 月停止。其中的一部分已經在 Distributednet 組織下利用分散式計算破解。Distributednet 暴力破解了用 56 位和 64 位金鑰的 RC5 加密的密文，正在嘗試破解 72 位金鑰的密文；截至 2018 年 2 月，502 的金鑰空間已被遍歷。以目前的速度，這將需要大約 166 年以測試的每一個可能的剩餘金鑰，以此才能保證專案的完成。這項任務啟發了許多在叢集計算領域的新興的開發研究。 參見 Madryga Red Pike 參考資料 外部連結 Rivestss revised paper describing the cipher Rivests original paper SCANs entry for the cipher RSA Laboratories FAQ What are RC5 and RC6 Helger Lipmaas links on RC5 Category 已攻破的分組密碼