#include<stdio.h>
#include<string.h>
typedef unsigned long ULONG;
void testEncrypt(char* key,char* pData);//加密函数
void testDecrypt(char* key,char* pData);//解密函数
int main()
{
//密钥
char key[256] = { "dingkaimeng" };
//要加密的数据
char pData[4096] = "如果有一天,迩爱一个人像莪爱迩一样,迩就知道莪有多累.界上其实根本没有感同深受这回事,针不刺到别人身上,他们就不知道有多痛!多少个纯洁的心灵被这个污浊的社会给——————污染了。有时候不是不明白只是不想弄明白,有时候不是不知道只是不想说出来。";
printf("原文是\n");
printf("%s\n", pData);
printf("加密之后\n");
testEncrypt(key,pData);
printf("%s\n", pData);
testDecrypt(key,pData);
printf("解密之后\n");
printf("%s\n", pData);
getchar();
return 0;
}
void rc4_init(unsigned char *s, unsigned char *key, unsigned long Len)
{
int i =0, j = 0;
char k[256] = {0};
unsigned char tmp = 0;
for (i = 0; i < 256; i++) {
s[i] = i;
k[i] = key[i % Len];
}
for (i = 0; i < 256; i++) {
j = (j + s[i] + k[i]) % 256;
tmp = s[i];
s[i] = s[j];
s[j] = tmp;
}
}
void rc4_crypt(unsigned char *s, unsigned char *Data, unsigned long Len)
{
int i = 0, j = 0, t = 0;
unsigned long k = 0;
unsigned char tmp;
for (k = 0; k < Len; k++) {
i = (i + 1) % 256;
j = (j + s[i]) % 256;
tmp = s[i];
s[i] = s[j];
s[j] = tmp;
t = (s[i] + s[j]) % 256;
Data[k] ^= s[t];
}
}
void testEncrypt(char* key,char* pData)
{
int i;
unsigned char s[256] = { 0 }, s2[256] = { 0 };
ULONG len = strlen(pData);
rc4_init(s, (unsigned char *) key, strlen(key));
for (i = 0; i < 256; i++)
{
s2[i] = s[i];
}
rc4_crypt(s, (unsigned char *) pData, len);
}
void testDecrypt(char* key,char* pData)
{
int i;
unsigned char s[256] = { 0 }, s2[256] = { 0 };
ULONG len = strlen(pData);
rc4_init(s, (unsigned char *) key, strlen(key));
printf("\n");
for (i = 0; i < 256; i++)
{
s2[i] = s[i];
}
rc4_init(s, (unsigned char *) key, strlen(key));
rc4_crypt(s2, (unsigned char *) pData, len);
}