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

📄 rc4cipher.cpp

📁 RC4算法的加解密实现,C++实现...
💻 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 + -