📄 rc4.cpp
字号:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <malloc.h>
void swap(int *array,int i,int j) //swap函数实现Sbox[i]与Sbox[j]的交换
{
int temp;
temp= array[i];
array[i] = array[j];
array[j] = temp;
}
char *endecrypt(const char *text, int textlen, const char *pkey) //加密解密函数
{
char *cipher;
int a,b,k,i=0,j=0;
int len;
int Sbox[256];
int Key[256];
len = strlen(pkey);
for(a=0;a<256;a++)
{
Key[a]=pkey[a%len];
Sbox[a]=a;
}
for(a=0,b=0;a<256;a++)
{
b=(b+Sbox[a]+Key[a])%256;
swap(Sbox,a,b);
}
cipher=(char *)malloc(textlen);
for(a=0;a<textlen;a++)
{
i=(i+1)%256;
j=(j+Sbox[i])%256;
swap(Sbox,i,j);
k=Sbox[(Sbox[i]+Sbox[j])%256];
cipher[a] = text[a]^k;
}
return cipher;
}
void main()
{
char buf[256],pw[16],*pen,*pde,*pch;
int x,len;
printf("**********RC4加密算法**********\n\n");
for(;;)
{
printf("请输入加密字符:\n");
fgets(buf,sizeof(buf),stdin);
for (x=strlen(buf)-1;(x>= 0)&&(buf[x]==10);x--)
buf[x] = 0;
if(!buf[0])
break;
printf("请输入密钥:\n");
fgets(pw,sizeof(pw),stdin);
for (x=strlen(pw)-1;(x>= 0)&&(pw[x]==10);x--)
pw[x] = 0;
if(!pw[0])
break;
len=strlen(buf);
pen=endecrypt(buf,len,pw);
printf("密文的十六进制表示:");
for (pch=pen,x=0;x<len;pch++,x++)
{
if(!(x%20))
printf("\n");
printf("%.2x",(unsigned char)*pch);
}
pde=endecrypt(pen,len,pw);
pde[len] = 0;
printf("\n解密后得到的明文:\n%s", pde);
printf("\n");
free(pen);
free(pde);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -