📄 rc4cipher.cpp
字号:
#include <iostream.h>
#include <string.h>
#include <fstream.h>
unsigned char S[256];
char tt[1000];
void initial(char *key)
{
unsigned char T[256]; //临时矢量
int len=strlen(key);
for(int i=0;i<256;i++){
S[i]=i;
T[i]=(unsigned char)key[i%len];
}
int j=0;
for(i=0;i<256;i++){
j=(j+(int)S[i]+(int)T[i])%256;
unsigned char tmp;
tmp=S[i];
S[i]=S[j];
S[j]=tmp;
}
}
/*******************************************************************/
void main()
{
cout<<"*****************RC4Cipher******************"<<endl;
char key[256]; //密钥
cout<<"请输入长度不超过256的密钥:";
cin>>key;
initial(key);
// 测试状态矢量S的初始化情况
/* int n=0;
for(int m=0;m<256;m++){
n++;
cout<<(int)S[m]<<" ";
if(n%10==0)cout<<endl;
}
cout<<endl;
*/
fstream text_file;
text_file.open("cleartext.txt",ios::in,0);
if(!text_file){
cout<<"Can not open cleartext.txt file!"<<endl;
return;
}
tt[0]='\0';
while(!text_file.eof()){
int z=strlen(tt);
char *tmp=tt+z;
text_file>>tmp;
}
cout<<endl<<"读得明文为:"<<tt<<endl;
text_file.close();
int ttlen=strlen(tt);
int i=0,j=0;
while(i<ttlen){
j=(j+S[i])%256;
unsigned char tmp;
tmp=S[i];
S[i]=S[j];
S[j]=tmp;
int t=((int)S[i]+(int)S[j])%256;
unsigned char k=S[t];
i=(i+1)%256;
tt[i]=(tt[i]^k);
}
cout<<endl<<"经加密后:"<<tt<<endl;
initial(key);
// 测试状态矢量S的初始化情况
/* n=0;
for(m=0;m<256;m++){
n++;
cout<<(int)S[m]<<" ";
if(n%10==0)cout<<endl;
}
cout<<endl;
*/
i=0,j=0;
while(i<ttlen){
j=(j+S[i])%256;
unsigned char tmp;
tmp=S[i];
S[i]=S[j];
S[j]=tmp;
int t=((int)S[i]+(int)S[j])%256;
unsigned char k=S[t];
i=(i+1)%256;
tt[i]=(tt[i]^k);
}
cout<<endl<<"经解密后:"<<tt<<endl;
cin.get();
cin.get();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -