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

📄 rc4.cpp

📁 实现RC4算法的控制台编码
💻 CPP
字号:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//#include<iostream.h>

void Swap(unsigned char *x,unsigned char *y)  //Swap function achieve exchange between two characters
{
	unsigned char temp;  //Intermediate variable
	temp=*x;*x=*y;*y=temp;
}

void RC4(char *iPath,char *oPath,char *K)  //Achieve the RC4 algorithm 
{
	FILE *in,*out;
	int len;
	unsigned char S[256];  
	unsigned char T[256];
    len=strlen(K);
	in=fopen(iPath,"rb");
	out=fopen(oPath,"wb");
	for(int i=0;i<256;i++)   //Initialization
	{
		S[i]=i;
		T[i]=K[i%len];
	}

    int j=0;   //Initial Permutation of S
    for(i=0;i<256;i++)
	{
		j=(j+S[i]+T[i])%256;
		Swap(&S[i],&S[j]);
	}

	i=j=0;   
	while(!feof(in))
	{
		unsigned char P,C;
		unsigned char k;
        int t;
 		P=fgetc(in);
		
		i=(i+1)%256;   //Stream Generation
		j=(j+S[i])%256;
		Swap(&S[i],&S[j]);
		t=(S[i]+S[j])%256;
		k=S[t];
		C=P^k;  //Achieve XOR between Plaintext or Ciphertext and key
		putc(C,out);
		//cout<<C;
	}
	fclose(in);
	fclose(out);
}

int main(int argc,char *argv[])    //Console operation
{
	while(argc!=5||!strcmp(argv[1],"RC4")||(!strcmp(argv[2],"-e")&&!strcmp(argv[2],"-d")))
	{
		printf("Wrong! Parameters are: RC4 -e/-d key inputfile outputfile \n");
		exit(0);
	}
    if(!strcmp(argv[2],"-e")) 
		RC4(argv[3],argv[4],argv[2]);   //Encryption
	else
		RC4(argv[3],argv[4],argv[2]);   //Decryption
	return 0;
}

⌨️ 快捷键说明

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