⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rc4.cpp

📁 RC4加密源代码
💻 CPP
字号:
#include<iostream>
#include<cstring>
using namespace std; 


void crypt(char cipher[]);///////////////////////////////解密过程函数,根据输入密钥再一次生成密钥流 
void main()
{
 cout<<"**************************RC4加解密程序**************************"<<endl;
 cout<<"****************************欢迎使用*****************************"<<endl;
 char choose1,choose2;
 do{
int s[256],t[256];
char k[256];/////////////////用户输入的密钥
char plaintext[1024],ciphertext[1024];
cout<<"输入密钥:";
cin>>k;
for(int i=0;i<256;i++)//////////////给字节状态矢量和可变长的密钥数组赋值
{
 s[i]=i;
 t[i]=k[i%strlen(k)];
}
int j=0;
for(int i=0;i<256;i++) //////使用可变长的密钥数组初始化字节状态矢量数组s
{
 int temp;
 j=(j+s[i]+t[i])%256;
 temp=s[i];
 s[i]=s[j];
 s[j]=temp;
}
cout<<"\n输入要加密的字符串:"<<endl;
cin>>plaintext;
int m,n,key[256],q;
m=n=0;
int i;
cout<<"\n得到密文:"<<endl;
for(i=0;i<strlen(plaintext);i++)/////////////由字节状态矢量数组变换生成密钥流并对明文字符进行加密
{
 int temp;
m=(m+1)% 256;
n=(n+s[n])% 256;
temp=s[m];
s[m]=s[n];
s[n]=temp;
q=(s[m]+s[n])%256;
key[i]=s[q];
ciphertext[i]=plaintext[i]^key[i];
cout<<ciphertext[i]; 

}
ciphertext[i]='\0';
cout<<endl;
/*cout<<"\n密钥流是:";
for(int i=0;i<strlen(plaintext);i++)
cout<<key[i]<<" ";
cout<<endl;*/ 

//////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
//解密
cout<<"\n是否对上面的密文进行解密?(y/n)";
cin>>choose2;
while(choose2=='y'||choose2=='Y')
{
 /*cout<<"\n解密后所得到的明文是:"<<endl;
for(int p=0;p<strlen(plaintext);p++)/////////////通过加密时所记录的密钥流对加密密文进行解密
{
 plaintext[p]=ciphertext[p]^key[p];
 cout<<plaintext[p];
}
cout<<endl;*/
 crypt(ciphertext);///////////////////////////////解密过程函数
choose2='n';
}
cout<<endl;
cout<<"\n是否希望继续使用程序?(y/n)";
cin>>choose1;
 }while(choose1=='y'||choose1=='Y'); 

 cout<<"\n****************************程序结束*****************************"<<endl<<endl;
system("pause");
} 

  

/////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////
//解密函数,密钥流的生成与加密相同 

void decrypt(char cipher[])
{
int s[256],t[256];
char k[256];/////////////////用户输入的密钥
char plaintext[1024];
cout<<"\n输入密钥:";
cin>>k;
for(int i=0;i<256;i++)//////////////给字节状态矢量和可变长的密钥数组赋值
{
 s[i]=i;
 t[i]=k[i%strlen(k)];
}
int j=0;
for(int i=0;i<256;i++) //////使用可变长的密钥数组初始化字节状态矢量数组s
{
 int temp;
 j=(j+s[i]+t[i])%256;
 temp=s[i];
 s[i]=s[j];
 s[j]=temp;
} 

int m,n,key[256],q;
m=n=0;
int i;
cout<<"\n解密后所得到明文是:"<<endl;
for(i=0;i<strlen(cipher);i++)/////////////由字节状态矢量数组变换生成密钥流并对密文字符进行解密
{
 int temp;
m=(m+1)% 256;
n=(n+s[n])% 256;
temp=s[m];
s[m]=s[n];
s[n]=temp;
q=(s[m]+s[n])%256;
key[i]=s[q];
plaintext[i]=cipher[i]^key[i];
cout<<plaintext[i]; 

} 

cout<<endl;
/*cout<<"\n密钥流是:";
for(int i=0;i<strlen(cipher);i++)
cout<<key[i]<<" ";*/
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -