资源简介
这是一个我自己编写的RC5算法,虽然可能有不足的地方,还还是值得借鉴的!

代码片段和文件信息
/*程序用到的头文件*/
#include
#include
#include
//此程序为RC5加密算法的实现--参数32/16/16
const int w=32; //定义字长为32比特
const int r=16; //定义循环轮数为16
const int b=16; //定义密钥长度为16个字节
const int t=34; //定义子密钥的个数为34个,即2*16+2
const int c=4; //定义存放以字为单位长度的数组的元素个数为4,即16*8/32=4
const long P=0xB7E15163; //定义一个常量P用来扩展子密钥
const long Q=0x9E3779B9; //定义一个常量Q用来扩展子密钥
typedef unsigned char BYTE; //定义BYTE为char类型,即长度为一个字节,也是数组K中元素的类型
typedef unsigned int DWORD; //定义DWORD为int类型,即长度为四个字节,也是数组L和S中元素的类型
struct DDWORD
{
DWORD left;
DWORD right;
};
static DWORD S[t]; //定义一个存放子密钥的数组S
static BYTE K[b]; //定义一个存放密钥的数组K
static DWORD L[c]; //定义一个以字为单位的数组L
#define ROTL(xy) ((x)<<(y&(w-1)))|((x)>>(w-(y&(w-1)))) //将x循环左移y位
#define ROTR(xy) ((x)>>(y&(w-1)))|((x)<<(w-(y&(w-1)))) //将x循环右移y位
void InitialKey() //初始化子密钥数组s
{
S[0]=P;
for(int i=1;i {
S[i]=S[i-1]+Q;
}
}
void Transfer(BYTE*K) //把以字节为单位的数组赋给以双字长为单位的数组
{
int m;
for(int i=0;i {
L[i]=0;
}
for(int j=0;j {
m=(K[j]&0xff)<<(8*(j%4)); //每4个字节为一轮,依次左移0位,8位,16位,24位
L[j/4]=L[j/4]+m; //4个字节左移后相加即得到数组L中的一个元素
}
}
void MixSL() //将数组S和L混合以得到子密钥数组S
{
int i=0j=0;
int A=0B=0;
for(int k=0;k<(3*t-1);k++)
{
A=S[i]=ROTL(S[i]+A+B3); //将(S[i]+A+B)循环左移3位
B=L[j]=ROTL(L[j]+A+B(A+B)); //将(L[j]+A+B)循环左移(A+B)位
i=(i+1)%(t); //将(i+1)/t的余数赋给i
j=(j+1)%(c); //将(j+1)/c的余数赋给j
}
}
void Encryption(DDWORD sourceDDWORD destDWORD *S) //双字加密函数
{
DWORD A=source.left; //初始化A为明文中前一个双字长的内容,即明文分组的左半部分
DWORD B=source.right; //初始化B为明文中后一个双字长的内容,即明文分组的右半部分
A=A+S[0];
B=B+S[1];
for(int i=1;i<=r;i++) //r轮循环
{
A=ROTL(A^BB)+S[2*i];
B=ROTL(B^AA)+S[2*i+1];
}
dest.left=A; //把变换后的A赋给密文分组的左半部分
dest.right=B; //把变换后的B赋给密文分组的后半部分
}
void Decryption(DDWORD sourceDDWORD destDWORD *S)//双字解密函数
{
DWORD A=source.left; //初始化A为密文中前一个双字长的内容,即密文分组的左半部分
DWORD B=source.right; //初始化B为密文中后一个双字长的内容,即密文分组的右半部分
for(int i=1;i<=r;i++) //r轮循环
{
B=ROTR((B-S[2*i+1])A)^A;
A=ROTR((A-S[2*i])B)^B;
}
B=B-S[1];
A=A-S[0];
dest.left=A; //恢复明文的左半部分
dest.right=B; //恢复明文的右半部分
}
void Crypt(char *sourcefilechar *destfile)
{
ifstream fin; //定义一个读文件
ofstream fout; //定义一个写文件
fin.open(sourcefileios::binary);
fout.open(destfileios::binary);
DDWORD sourdest;
fin.seekg(ios::beg);
while(!fin.eof())
{
fin.read((char *)(&sour)sizeof(sour));
Encryption(sourdestS);
fout.write((char*)(&dest)sizeof(dest));
}
fin.close ();
fin.close ();
}
void Decrypt(char *sourcefilechar *destfile)
{
ifstream fin; //定义一个读文件
ofstream fout; //定义一个写文件
fin.open(sourcefileios::binary);
fout.open(destfileios::binary);
fin.seekg(ios::beg
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 331 2011-03-30 10:43 RC5加密解密\RC5加密解密.dsw
文件 4276 2011-03-30 10:43 RC5加密解密\RC5加密解密.dsp
文件 25600 2011-03-30 11:05 RC5加密解密\RC5加密解密.ncb
文件 91136 2011-04-06 17:07 RC5加密解密\Debug\vc60.idb
文件 135168 2011-04-06 17:07 RC5加密解密\Debug\vc60.pdb
文件 528441 2011-03-30 11:04 RC5加密解密\Debug\RC5加密解密.exe
文件 1082368 2011-03-30 11:04 RC5加密解密\Debug\RC5加密解密.pdb
文件 2007240 2011-03-30 10:44 RC5加密解密\Debug\RC5加密解密.pch
文件 769672 2011-03-30 11:04 RC5加密解密\Debug\RC5加密解密.ilk
文件 229423 2011-04-06 17:07 RC5加密解密\Debug\1.exe
文件 1082368 2011-04-06 17:07 RC5加密解密\Debug\1.pdb
文件 285744 2011-04-06 16:26 RC5加密解密\Debug\1.pch
文件 274020 2011-04-06 17:07 RC5加密解密\Debug\1.ilk
文件 16705 2011-04-06 17:07 RC5加密解密\Debug\1.obj
文件 1273 2011-03-30 11:04 RC5加密解密\RC5加密解密.plg
文件 50176 2011-04-06 17:10 RC5加密解密\1.ncb
文件 721 2011-04-06 17:07 RC5加密解密\1.plg
文件 3341 2011-04-06 16:37 RC5加密解密\1.dsp
文件 4141 2011-04-06 17:07 RC5加密解密\1.cpp
文件 49664 2011-04-06 17:10 RC5加密解密\1.opt
文件 527 2011-04-06 17:10 RC5加密解密\1.dsw
目录 0 2011-03-30 10:43 RC5加密解密\Debug
目录 0 2011-03-30 10:43 RC5加密解密
----------- --------- ---------- ----- ----
6642335 23
- 上一篇:国密算法pdf文档及SM2算法JS实现
- 下一篇:bpl包 .bpl文件
相关资源
- ABB第五代机器人控制器IRC5手册.pdf
- RC522 M1卡 S50卡刷卡c程序 项目在用程序
- RC522&STM32刷卡例程
- RC531开发套件VER3.1
- RC522读写MI卡程序,STC89C52RC调试通过,
- 正点原子Mini开发板的RC522刷卡程序触
- 基于51单片机的刷卡签到系统
- stm32实现对RC522读写块
- MF RC522 开发板资料及源程序
- 很好的MFRC500智能射频卡学习资料(内
- 内含RC522与51单片机硬件设计与程序,
- MFRC522射频卡,RFID,非接触式IC卡,感
- protel99se 设计的 RC522非接触读卡器硬件
- ABB控制器软件IRC5应用手册
- 51单片机rc522 射频的程序和与PCB电路图
- RC522全套开发资料,包含pcb原理图,程
- RFID_RC522战舰程序
- stm32 f103RCT6用正点原子Mini板可用的R
- stm32rc522
- STM32的RC522程序
- RFID-RC522+STC89C52+串口通信+新手教程+中
- F103-指南者 RC522程序改版
- RC522实现钱包功能
- stm32驱动rc522程序
- 调试OK的stm8+rc522原理图和源代码
- 基于51单片机控制RC522的设计
- STC单片机控制MFRC522的完整资料,包括
- MFRC522原理图和程序
- STM32+RC522--demo.rar
- RC522饮水机.zip
评论
共有 条评论