?? 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 + -