资源简介
这是一个我自己编写的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文件
相关资源
- STM32 RFID RC522 模拟SPI 读写卡程序
- NxpRdLib_PublicRelease
- stm32读取磁卡ID程序源码
- rc522之51单片机1602显示以及上位机
- 基于STM32的RC522上位机读写射频卡程序
- 基于HAL库STM32+RC522读写卡程序 调试完
- rc522开发资料51读写卡参考例程及上位
- RC522 单片机 上位机 下位机源码
- Verilog编写CRC5校验码,带modelsim仿真,
- RFID-RC522门禁控制系统
- RC522射频卡用户使用手册资料Ver_1.0
- 射频学习资料-射频,RF ID卡,RC500 全
- STM32 pcb图带wifi接口,rc522接口
- RC522中文数据手册
- STM32(硬件SPI)+RC522读写卡源程序
- RC522操作非接触式CPU卡和支持ISO7816协
- 佳能iRC5185i维修手册
- STM32F407RFID-RC522门禁控制系统.zip
- RC522 RFID射频模块
- RC522资料合集
- rc522中文手册
- STC89C51单片机RC522读卡程序,Keil文件,
- RC522数据手册中文版
- RC522射频模块充值饭卡,水卡
- rc-522基于CC2530的读取IC卡号例程,可用
- stm32f103系列spi连接rc522的rfid读卡程序
- 基于STM32的MFRC522射频识别源程序
- stm32射频卡RC522测试程序亲测可用
- RC522单片机读写卡程序
- RC522原理图
评论
共有 条评论