資源簡介
這是一個我自己編寫的RC5算法,雖然可能有不足的地方,還還是值得借鑒的!

代碼片段和文件信息
/*程序用到的頭文件*/
#include
#include
#include
//此程序為RC5加密算法的實現(xiàn)--參數(shù)32/16/16
const?int?w=32; //定義字長為32比特
const?int?r=16; //定義循環(huán)輪數(shù)為16
const?int?b=16; //定義密鑰長度為16個字節(jié)?
const?int?t=34; //定義子密鑰的個數(shù)為34個,即2*16+2
const?int?c=4; //定義存放以字為單位長度的數(shù)組的元素個數(shù)為4,即16*8/32=4
const?long?P=0xB7E15163; //定義一個常量P用來擴展子密鑰
const?long?Q=0x9E3779B9; //定義一個常量Q用來擴展子密鑰
typedef?unsigned?char??????BYTE; //定義BYTE為char類型,即長度為一個字節(jié),也是數(shù)組K中元素的類型
typedef?unsigned?int???????DWORD; //定義DWORD為int類型,即長度為四個字節(jié),也是數(shù)組L和S中元素的類型
struct?DDWORD
{
DWORD?left;
DWORD?right;
};
static?DWORD?S[t]; //定義一個存放子密鑰的數(shù)組S
static?BYTE?K[b]; //定義一個存放密鑰的數(shù)組K?
static?DWORD?L[c]; //定義一個以字為單位的數(shù)組L
#define?ROTL(xy)?((x)<<(y&(w-1)))|((x)>>(w-(y&(w-1)))) //將x循環(huán)左移y位
#define?ROTR(xy)?((x)>>(y&(w-1)))|((x)<<(w-(y&(w-1)))) //將x循環(huán)右移y位
void?InitialKey() //初始化子密鑰數(shù)組s
{
S[0]=P;
for(int?i=1;i {
S[i]=S[i-1]+Q;
}
}
void?Transfer(BYTE*K) //把以字節(jié)為單位的數(shù)組賦給以雙字長為單位的數(shù)組
{
int?m;
for(int?i=0;i {
L[i]=0;
}
for(int?j=0;j {
m=(K[j]&0xff)<<(8*(j%4)); //每4個字節(jié)為一輪,依次左移0位,8位,16位,24位
L[j/4]=L[j/4]+m; //4個字節(jié)左移后相加即得到數(shù)組L中的一個元素
}
}
void?MixSL() //將數(shù)組S和L混合以得到子密鑰數(shù)組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)循環(huán)左移3位
B=L[j]=ROTL(L[j]+A+B(A+B)); //將(L[j]+A+B)循環(huán)左移(A+B)位
i=(i+1)%(t); //將(i+1)/t的余數(shù)賦給i
j=(j+1)%(c); //將(j+1)/c的余數(shù)賦給j
}
}
void?Encryption(DDWORD?sourceDDWORD?destDWORD?*S) //雙字加密函數(shù)
{
DWORD?A=source.left; //初始化A為明文中前一個雙字長的內(nèi)容,即明文分組的左半部分
DWORD?B=source.right; //初始化B為明文中后一個雙字長的內(nèi)容,即明文分組的右半部分
A=A+S[0];
B=B+S[1];
for(int?i=1;i<=r;i++) //r輪循環(huán)
{
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)//雙字解密函數(shù)
{
DWORD?A=source.left; //初始化A為密文中前一個雙字長的內(nèi)容,即密文分組的左半部分
DWORD?B=source.right; //初始化B為密文中后一個雙字長的內(nèi)容,即密文分組的右半部分
for(int?i=1;i<=r;i++) //r輪循環(huán)
{
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; //恢復(fù)明文的左半部分
dest.right=B; //恢復(fù)明文的右半部分
}
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實現(xiàn)
- 下一篇:bpl包 .bpl文件
評論
共有 條評論