rc4.c

来自「RC4伪随机流加密算法」· C语言 代码 · 共 63 行

C
63
字号


#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 + =
减小字号Ctrl + -
显示快捷键?