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

📄 rc4.cpp

📁 非常不错的流密码rc4加解密程序 c语言编写 调试运行成功
💻 CPP
字号:
#include "RC4.h"


int main( void )
{   
	int i;
	struct rc4_state s;
	unsigned char buffer[10];
	unsigned char data[]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09};//加密的数据
	unsigned char key[]={0x01,0x02,0x03,0x04,0x05,0x06};//种子密钥

	printf("种子密钥:\n");
		for (i=0;i<sizeof(key);i++) {
			printf("%x",key[i]);
		} 
		printf( "\n 明文: \n");
		for (i=0;i<sizeof(data);i++) {
			printf("%x",data[i]);
		}
		printf("\n 加密子密钥序列: \n");
		rc4_setup( &s, key, sizeof(key) );
		for (i=0;i<256;i++) {
			printf("%x",s.m[i]);
		}
		printf("\n 密文:\n");
		memcpy(buffer,data,sizeof(data));
		rc4_crypt( &s, buffer,sizeof(data));
		for (i=0;i<sizeof(data);i++) {
			printf("%x",buffer[i]);
		}

		printf("\n 解密子密钥序列: \n");//解密需重新生成子密钥序列
		rc4_setup( &s, key, sizeof(key) );
		for (i=0;i<256;i++) {
			printf("%x",s.m[i]);
		}
		printf("\n 明文:\n");
		
		rc4_crypt( &s, buffer,sizeof(data));
		for (i=0;i<sizeof(data);i++) {
			printf("%x",buffer[i]);
		}
		

		return(0);
}
//函数功能:由给定的种子密钥生成子密钥
void rc4_setup( struct rc4_state *s, unsigned char *key,  int length )
{
	int i, j, k, *m, a;

	s->x = 0;
	s->y = 0;
	m = s->m;

	for( i = 0; i < 256; i++ )
	{
		m[i] = i;
	}

	j = k = 0;

	for( i = 0; i < 256; i++ )
	{
		a = m[i];
		j = (unsigned char) ( j + a + key[k] );
		m[i] = m[j]; m[j] = a;
		if( ++k >= length ) k = 0;
	}
}
//函数功能:由生成的子密钥加解密数据
void rc4_crypt( struct rc4_state *s, unsigned char *data, int length )
{ 
	int i, x, y, *m, a, b;

	x = s->x;
	y = s->y;
	m = s->m;

	for( i = 0; i < length; i++ )
	{
		x = (unsigned char) ( x + 1 ); a = m[x];
		y = (unsigned char) ( y + a );
		m[x] = b = m[y];
		m[y] = a;
		data[i] ^= m[(unsigned char) ( a + b )];
	}

	s->x = x;
	s->y = y;
}

⌨️ 快捷键说明

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