⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rc4.c

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