cpp1.cpp

来自「密码学:RC4的计算方法~~~ 经实现能用」· C++ 代码 · 共 153 行

CPP
153
字号
#include <stdlib.h>

#include <stdio.h>

#include <time.h>

#include <string.h>



typedef unsigned char  UINT8;

typedef unsigned short UINT16;

typedef unsigned long  UINT32;



const UINT8 C_data[] =

{

	1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16

};



UINT8 inputdata[256],outputdata[256];

UINT8 mainkey[16];



void P_RC4(UINT8 * pkey, UINT8 * pin, UINT8 * pout, UINT8 len);



void main(void)

{

	UINT8 length,i;

	

	memset(inputdata,0,sizeof(inputdata));

	memset(outputdata,0,sizeof(outputdata));

	memset(mainkey,0,sizeof(mainkey));

	length = sizeof(C_data);

	memcpy(inputdata,C_data,length);

	for(i=0;i<length;i++)  printf("%02x ",inputdata[i]);

	printf("\n");printf("\n");



	srand((UINT16)time(NULL));

	for(i=0;i<16;i++)  mainkey[i] = (UINT8)rand();		//产生16字节的随机数

	

	P_RC4(mainkey,inputdata,outputdata,length);			//加密

	for(i=0;i<length;i++)  printf("%02x ",outputdata[i]);

	printf("\n");printf("\n");



	memset(inputdata,0,sizeof(inputdata));

	P_RC4(mainkey,outputdata,inputdata,length);			//解密

	for(i=0;i<length;i++)  printf("%02x ",inputdata[i]);

	printf("\n");printf("\n");

}



void P_RC4(UINT8 * pkey, UINT8 * pin, UINT8 * pout, UINT8 len)

{

	UINT8 S[256],K[256],temp;

	UINT32 i,j,t,x;

	

	j = 1;

	for(i=0;i<256;i++)

	{

		S[i] = (UINT8)i;

		if(j > 16) j = 1;

		K[i] = pkey[j-1];

		j++;

	}

	j = 0;

	for(i=0;i<256;i++)

	{

		j = (j + S[i] + K[i]) % 256;

		temp = S[i];

		S[i] = S[j];

		S[j] = temp;

	}

	i = j = 0;

	for(x=0;x<len;x++)

	{

		i = (i+1) % 256;

		j = (j + S[i]) % 256;

		temp = S[i];

		S[i] = S[j];

		S[j] = temp;

		t = (S[i] + (S[j] % 256)) % 256;

		pout[x] = pin[x] ^ S[t];

	}

}

⌨️ 快捷键说明

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