文档介绍:,并由RSA实验室分析。它是参数可变的分组密码算法,三个可变的参数是:分组大小、密钥大小和加密轮数。在此算法中使用了三种运算:异或、加和循环。RC5是种比较新的算法,Rivest设计了RC5的一种特殊的实现方式,因此RC5算法有—个面向字的结构:RC5-w/r/b,这里w是字长其值可以是16、32或64对于不同的字长明文和密文块的分组长度为2w位,r是加密轮数,b是密钥字节长度。由于RC5-个分组长度可变的密码算法,为了便于说明在本文中主耍是针对64位的分组w=32进行处理的,下而详细说明了RC5加密解密的处理过程:1、创建密钥组,RC5算法加密时使用了2r+2个密钥相关的的32位字:,这里r表示加密的轮数。创建这个密钥组的过程是非常复杂的但也是直接的,首先将密钥字节拷贝到32位字的数组L中(此时要注意处理器是little-endian顺序还是big-endian顺序),如果需耍,最后一个字可以用零填充。然后利用线性同余发生器模2初始化数组S:对于i“到2(r+l)-l:(本应模,本文中令w=32)其中对于16位字32位分组的RC5,P=0xb7elQ=0x9e37对于32位字和64位分组的RC5,P=0xb7el5163Q=0x9e3779b9对于64位字和128位分组,P=0xb7151628aed2a6bQ=0x9e3779b97f4a7cl5最后将L与S混合,混合过程如下:i=j=0A=B=0处理3n次(这里n是2(r+l)和c中的最大值,其中c表示输入的密钥字的个数)2、 加密处理,在创建完密钥组后开始进行对明文的加密,加密时,首先将明文分组划分为两个32位字:A和B(在假设处理器字节顺序是little-endian>w=32的情况下,第一个明文字节进入A的最低字节,第四个明文字节进入A的最高字节,第五个明文字节进入B的最低字节,以此类推),其中操作符表示循环左移,加运算是模(本应模,本文中令w=32)的。输出的密文是在寄存器A和B中的内容3、 解密处理,解密也是很容易的,把密文分组划分为两个字:A和B(存储方式和加密一样),这里符合>>>是循环右移,减运算也是模(本应模,本文中令w=32)的。RSA试验室花费了相当的时间来分析64位分组的RC5算法,在5轮后统计特性看起来非常好。在8轮后,每一个明文位至少影响一个循环。对于5轮的RC5,差分攻击需要个选择明文;对10轮需要个:对于12轮需耍个;对15轮需耍个。而对于64位的分组只有个可能的明文,所以对于15轮或以上的RC5的差分攻击是失败的。在6轮后线性分析就是安全的了,Rivest推荐至少12轮,甚至可能是16轮。这个轮数可以进行选择。rfc2040文档中列出了RC5算法密钥生成和加密实现的C代码,在此笔者参照文档中定义的算法结构,编写了用于对密文解密的程序代码(此代码经多次测试运行良好),供读者参考。1>补充了两个个宏定义:#defineSHLl(x,s”w)((RC5_W0RD)((x)«((w)-((s)&R0T_MASK))))#defineROTR(x,s,w)((RC5_W0RD)(SHRl((x)z(s))|SHLl((x),(s),(w))))2、解密函数定义如下:v