文档详情

RC4算法实验报告.docx

发布:2025-06-10约2.4千字共5页下载文档
文本预览下载声明

RC4密码算法实验报告

二队十二班胡岩20118130211

一.实验内容:

编程实现RC4加/解密算法。

二.算法分析

#includeiostream.h

#includestring.h

#includestdio.h

#includeconio.h

#includestdlib.h

#includefcntl.h

#includesys\stat.h

#includeio.h

#defineSIZE512

charpData[512]={\0};

typedefunsignedlongULONG;

voidswap(unsignedchar*s,unsignedinti,unsignedintj)

{

unsignedchartemp=s[i];

s[i]=s[j];

s[j]=temp;

}

voidrc4_init(unsignedchar*s,unsignedchar*key,unsignedlongLen)

{

inti=0,j=0,k[256]={0};

for(i=0;i256;i++)

{

s[i]=i;

k[i]=key[i%Len];

}

for(i=0;i256;i++)

{

j=(j+s[i]+k[i])%256;

swap(s,i,j);

}

}

voidrc4_crypt(unsignedchar*s,unsignedchar*Data,unsignedlongLen)

{

intx=0,y=0,t=0;

unsignedlongi=0;

for(i=0;iLen;i++)

{

x=(x+1)%256;

y=(y+s[x])%256;

t=(s[x]+s[y])%256;

swap(s,x,y);

Data[i]^=s[t];

}

}

voidsave()

{

FILE*fp;

inti;

if((fp=fopen(1.txt,wb))==NULL)

{

cout不能翻开文件!endl;

return;

}

for(i=0;iSIZE;i++)

if(fwrite(pData[i],sizeof(pData[512]),1,fp)!=1)

cout文件写入错误!endl;

fclose(fp);

}

voidmain()

{

inthandle;

charstring[40];

intfunction=1;

intlength,res;

unsignedchars[256]={0};//S-box

charkey[256]={\0};

while(true)

{

if(function==1)

{

cout输入要加密的明文:pDataendl;

cinpData;

ULONGlen=strlen(pData);

cout输入加密所用的密钥:keyendl;

cinkey;

ULONGc=strlen(key);

rc4_init(s,(unsignedchar*)key,strlen(key));//初始化

rc4_crypt(s,(unsignedchar*)pData,len);//加密

cout输出加密后的密文:pDataendl;

save();

}

elseif(function==2)

{

ULONGlen=strlen(pData);

rc4_init(s,(unsignedchar*)key,strlen(key));//初始化

rc4_crypt(s,(unsignedchar*)pData,len);//解密

cout解密后的明文为:pData;

save();

}

elseif(function=3)

{

cout退出RC4加解密系统!endl;

break;

}

else

{

cout请输入正确的命令符:\n;

}

cout\n;

cout输入1加密新的明文,输入2对刚加密的密文进行解密,输入3退出系统:\n;

cout请输入命令符:\n;

cinfunction;

}

}

三.实验结果

〔加密〕

记事本

〔解密〕

记事本

四、实验心得和总结

在编写RC4算法的过程中参考了一些关键性的代码,然后剩下的只是对具体的实现了,其中会用到Swap函数的实现和一些模运算,这都是

显示全部
相似文档