📄 rc4.c
字号:
#include <string.h>
#include "rc4.h"
void RC4_Set_Key(RC4_KEY * rc4_key, unsigned char * key, int keyLen)
{
int i, j, n;
unsigned char K[256];
unsigned char c; //用作临时变量
//S[0] = 0, S[1] = 1...S[255] = 255
for(n=0; n<256; n++)
{
rc4_key->S[n] = n;
}
//把key循环放进K
i = 0;
for(n=0; n<256; n++)
{
K[n] = key[i % keyLen];
i++;
}
//生成S
j = 0;
for(i=0; i<256; i++)
{
j = (j + rc4_key->S[i] + K[i]) % 256;
c = rc4_key->S[i];
rc4_key->S[i] = rc4_key->S[j];
rc4_key->S[j] = c;
}
}
void RC4(RC4_KEY * rc4_key, unsigned char * in, int inLen, unsigned char * out)
{
int i, j, n, t;
unsigned char c;
i = 0;
j = 0;
//
for(n=0; n<inLen; n++)
{
i = (i + 1) % 256;
j = (j + rc4_key->S[i]) % 256;
//交换S[i]和S[j]
c = rc4_key->S[i];
rc4_key->S[i] = rc4_key->S[j];
rc4_key->S[j] = c;
t = (rc4_key->S[i] + rc4_key->S[j]) % 256;
c = rc4_key->S[t];
out[n] = in[n] ^ c; //异或加密
}
//用完后自动清空rc4_key,无须用户置0
memset(rc4_key, 0, 256);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -