RC5加密算法有w,r,b三个参数,经典的w=32,r=12,b=16我已经在C下实现,可是我把w=16时,却出现错误,解密不出来密文,貌似是子密钥的问题,因为我把生成的密钥改成简单的数字,这样就可以解密出来密文,但是我不知道为什么会出现这个问题,难道是因为密钥太大在循环移位时出错?求高手解答疑问!
以下是代码:
/*RC5 C代码实现
基本的RC5 3种算法组成,即密钥扩展算法、加密算法和解密算法。故RC5的C语言实现也由以下几个部分构成。
1、 参数的定义
*/
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <math.h>
int w=16;//字长
int r=12;//12;//轮数12
int b=16;//密钥长度
int t=26;//2*r+2=12*2+2=26
int c=8; //b*8/w = 16*8/32
typedef unsigned long int FOURBYTEINT;//四字节
typedef unsigned short int TWOBYTEINT;//2字节
typedef unsigned char BYTE;
void InitialKey(unsigned char* KeyK,int b);
void generateChildKey(unsigned char* KeyK,TWOBYTEINT* ChildKeyS);
void Encipher(TWOBYTEINT* In,TWOBYTEINT* Out,TWOBYTEINT* S);
void Decipher(TWOBYTEINT* In,TWOBYTEINT* Out,TWOBYTEINT* S);
#define NoOfData 4
/**2、循环移位函数
由于在生成子密钥,加密,解密过程中都要进行循环移位,故要首先定义循环以为函数。
* 循环左移和右移函数
* x : 被循环的数
* y : 将要循环的位数
*/
#define ROTL(x,y) (((x)<<(y&(w-1)
求RC5加密算法w=16,r=12,b=16时的C语言实现代码或者解决之道
最新推荐文章于 2023-06-09 15:48:55 发布