RC5加密算法

[本人baidu博客全部搬家到csdn,baidu博客地址:http://hi.baidu.com/new/miracleconf]

以下是RC5加密解密算法的C++基本实现,仅供参考

// RC5.cpp : Defines the entry point for the console application.
#include "stdafx.h"
#include<iostream.h>
#include <stdlib.h>
#include <stdio.h>
 
#define UINT32 unsigned int
#define INT32  int
#define UINT16 unsigned short
#define INT16  short
#define UINT8  unsigned char
#define INT8   char
 
unsigned int subKey[25];
void generateSubKey()
{
   UINT8 i;
 
   for(i=0;i<25;i++)
   subKey[i] = i;
}
 
 
void encrypt(UINT32 *PText,UINT32 *CText)
{//进行加密
UINT32 PData[1];
UINT32 CData[1];
UINT32 tempData1,tempData2,temp;
UINT8  i;
 
PData[0] = *PText;
PText++;
PData[1] = *PText;
    CData[0] = *CText;
    CText++;
    CData[1] = *CText;
    tempData1 = PData[0] + subKey[0];
    tempData2 = PData[1] + subKey[1];
for(i=1;i<=12;i++)
{
       temp = tempData1;
 
       tempData1 ^= tempData2;
  _rotl(tempData1,tempData2);
       tempData1 += subKey[2*i];
 
       tempData2 ^= temp;
  _rotl(tempData2,temp);
       tempData2 += subKey[2*i + 1];
  
}
 
    CData[0] = tempData1;
    CData[1] = tempData2;
}
 
void decrypt(UINT32 *PText,UINT32 *CText)
{//进行解密
 
UINT32 PData[1];
UINT32 CData[1];
UINT32 tempData1,tempData2,temp1,temp2;
UINT8  i;
 
//PData = PText;
//     CData = CText;
PData[0] = *PText;
PText++;
PData[1] = *PText;
    CData[0] = *CText;
    CText++;
    CData[1] = *CText;
tempData1 = CData[0];
tempData2 = CData[1];
for(i=12;i<=1;i--)
{
       temp1 = tempData1;
       temp2 = tempData2;
 
       tempData1 = CData[0] - subKey[2*i];
       tempData2 = CData[1] - subKey[2*i + 1];
 
  _rotr(tempData2,temp1);
       tempData2 ^= temp1;
 
  _rotr(tempData1,temp2);
       tempData1 ^= temp2;
  
}
 
    PData[0] = tempData1 - subKey[1];
    PData[1] = tempData2 - subKey[0];
 
}
 
int main()
{
UINT32 PlainText[1];
UINT32 CipherText[1];
    
    generateSubKey();
cout<<"Hello!!\n\n";
/*cout<<"请输入你要被加密的数据(HEX,32位)\n";
cout<<"\t\t数据1:";
cin>>PlainText[0];
cout<<"\t\t数据2:";
cin>>PlainText[1];
 */
PlainText[0] = 0x5a5a5a5a;
PlainText[1] = 0x12345678;
 
  cout<<"加密前的数据为:"<<PlainText[0]<<","<<PlainText[1]<<"\n";   
 
encrypt(PlainText,CipherText);
 
  cout<<"加密后的数据为:"<<CipherText[0]<<","<<CipherText[1]<<"\n";   
 
decrypt(PlainText,CipherText);
 
  cout<<"解密后的数据为:"<<PlainText[0]<<","<<PlainText[1]<<"\n"; 
 
return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值