rc4算法实验报告(共9篇).doc
文本预览下载声明
rc4算法实验报告(共9篇)
RC4算法实验报告
RC4密码算法实验报告
二
一.实验内容:
编程实现RC4加/解密算法。
二.算法分析
#includeiostream.h
#includestring.h
#includestdio.h
#include conio.h
#include stdlib.h
#include fcntl.h
#include sys\stat.h
#include io.h
#define SIZE 512
charpData[512]={\0};
typedef unsigned long ULONG;
void swap(unsigned char *s, unsigned inti, unsigned int j)
{
unsigned char temp = s[i];
s[i] = s[j];
s[j] = temp;
}
void rc4_init(unsigned char *s, unsigned char *key,unsigned long Len)
{
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);
} 队十二班胡岩20118130211
}
void rc4_crypt(unsigned char *s,unsigned char *Data, unsigned long Len)
{
int x=0,y=0,t=0;
unsigned long i=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];
}
}
void save()
{
FILE*fp;
inti;
if((fp=fopen(1.txt,wb))==NULL)
{
cout不能打开文件!endl;
return;
}
for(i=0;iSIZE;i++)
if(fwrite(amp;pData[i],sizeof(pData[512]),1,fp)!=1)
cout文件写入错误!endl;
fclose(fp);
}
void main()
{
int handle;
char string[40];
int function=1;
int length, res;
unsigned char s[256] = {0};//S-box
char key[256] = {\0};
while(true)
{
if(function==1)
{
cout输入要加密的明文:pDataendl;
cinpData;
ULONG len = strlen(pData);
cout输入加密所用的密钥: keyendl;
cinkey;
ULONG c = strlen(key);
rc4_init(s,(unsigned char *)key,strlen(key));//初始化
rc4_crypt(s,(unsigned char *)pData,len);//加密
cout输出加密后的密文:pDataendl;
save();
}
else if(function==2)
{
ULONG len = strlen(pData);
rc4_init(s,(unsigned char *)key,strlen(key));//初始化
rc4_crypt(s,(unsigned char *)pData,len);//解密
cout解密后的明文为:pData;
save();
}
else if(function=3)
{
cout退出RC4加解密系统!endl;
break;
}
else
{
cout请输入正确的命令符:\n;
}
cout\n;
cout输入1加密新的明文,输入2对刚加密的密文进行解密,输入3退出系统:\n; cout请输入命令符:\n;
cinfunction;
}
}
三.实验结果
(加密)
记事本
(解密)
记事本
四、实验心得和总结
在编写RC4算法的过程中参考了一些关键性的代码,然后剩下的只是对具体的实现了,其中会用到Swap函数的实现和一些模运算,这都是一些基
显示全部