myrc4.c

来自「简单的RC4算法的实现」· C语言 代码 · 共 81 行

C
81
字号

//
// RC4加密算法
// 主要用来演示算法过程,也可以用来实用,
//   但是速度约是OpenSSL中的RC4的1/5。
// 
// 参照 中译本 Schneier《应用密码学》第二版 第282页
// 
//  by linfb@sdu.edu.cn
//    2004,3,2
// 


#include "myrc4.h"

const char *RC4_options()
{
	return 0;
}

void RC4_set_key(RC4_KEY *key, int len, const unsigned char *data)
{
	int n;
	unsigned char i=0, j=0, temp;
	
	// 重复key以填满K[256]
	for (n=0; n<=255; n++)
		key->K[n] = data[n%len]; // % 运算较慢

	// S[256]: 0,1,2,3,...,255
	for (n=0; n<=255; n++)
		key->S[n] = n;
	
	// 把K混淆和扩散到S中
	for (n=0; n<=255; n++)
	{
		i = n;
		j += key->S[i]+key->K[i];
		temp = key->S[i];
		key->S[i] = key->S[j];
		key->S[j] = temp;
	}

	// i,j
	key->i = 0;
	key->j = 0;
}

void RC4(RC4_KEY *key, unsigned long len, const unsigned char *indata,
		unsigned char *outdata)
{
	unsigned long l=0;
	unsigned char i, j, k, temp;

	i = key->i;
	j = key->j;

	while (l<len)
	{
		i++;
		j += key->S[i];
		
		temp = key->S[i];
		key->S[i] = key->S[j];
		key->S[j] = temp;
		
		temp = key->S[i] + key->S[j];
		k = key->S[temp];
		
		outdata[l] = indata[l] ^ k;

		l++;
	}

	key->i = i;
	key->j = j;

}


⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?