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