c语言实现RC5分组密钥算法的应用.docxVIP

  • 23
  • 0
  • 约1.14万字
  • 约 24页
  • 2022-03-01 发布于浙江
  • 举报
PAGE PAGE 1 c语言实现RC5分组密钥算法的应用   加密解密   1、创建密钥组   RC5算法加密时使用了2r+2个密钥相关的的32位字: ,这里r表示加密的轮数。创建这个密钥组的过程是特别简单的但也是直接的,首先将密钥字节拷贝到32位字的数组L中(此时要留意处理器是little-endian挨次还是big-endian挨次),假如需要,最终一个字可以用零填充。然后利用线性同余发生器模2初始化数组S:   对于i=1到2(r+1)-1: (本应模 ,本文中令w=32)   其中对于16位字32位分组的RC5,P=0xb7e1 Q=0x9e37   对于32位字和64位分组的RC5,P=0xb7e15163 Q=0x9e3779b9   对于64位字和128位分组,P=0xb7151628aed2a6b Q=0x9e3779b97f4a7c15   最终将L与S混合,混合过程如下:      i=j=0   A=B=0   处理3n次(这里n是2(r+1)和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轮。这个轮数可以进行选择。   RC5 分组密钥算法 C语言实现   [cpp] view pl(ai)n copy/*RC5 C代码实现   w/r/b=32/12/16   基本的RC5 3种算法组成,即密钥扩展算法、加密算法和解密算法。故RC5的C语言实现也由以下几个部分构成。   1、 参数的定义   */   #include 《stdlib.h》   #include 《stdio.h》   #include 《string.h》   #include 《math.h》   int w=32;//字长 32bit 4字节   int r=12;//12;//加密轮数12   int b=16;//主密钥(字节为单位8bit)个数 这里有16个   int t=26;//2*r+2=12*2+2=26   int c=4; //主密钥个数*8/w = 16*8/32   typedef unsigned long int FOURBY(TE)INT;//四字节   typedef unsigned short int TWOBYTEINT;//2字节   typedef unsigned char BYTE;   void Ini(TI)alKey(unsigned char* KeyK,int b);   void generateChildKey(unsigned char* KeyK,FOURBYTEINT* ChildKeyS);   void Encipher(FOURBYTEINT* In,FOURBYTEINT* Out,FOURBYTEINT* S);   void Decipher(FOURBYTEINT* In,FOURBYTEINT* Out,FOURBYTEINT* S);   #define NoOfData 4   /**2、循环移位函数   由于在生成子密钥,加密,解密过程中都要进行循环移位,故要首先定义循环以为函数。   * 循环左移和右移函数   * x : 被循环的数   * y : 将要循环的位数   */   #define ROT

文档评论(0)

1亿VIP精品文档

相关文档