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

📄 myrc4.c

📁 简单的RC4算法的实现
💻 C
字号:

//
// 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 + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -