求RC5加密算法w=16,r=12,b=16时的C语言实现代码或者解决之道

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)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值