- 1、本文档共5页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
密码学学实验RC4
流密码(RC4)算法
简介
RC4算法是一种在电子信息领域加密的技术手段,用于无线通信网络,是一种电子密码,只有经过授权(缴纳相应费用)的用户才能享受该服务。
详细介绍
代码实现
#includestdio.h
#includememory.h
#includestring.h
#includestdlib.h
#define buf_size 1024
typedef struct rc4_key
{
unsigned char state[256];
unsigned char x;
unsigned char y;
} rc4_key;
void swap_byte(unsigned char*x,unsigned char*y) //两个变量交换
{
*x=*x^*y;
*y=*x^*y;
*x=*x^*y;
}
void prepare_key(unsigned char *key_data_ptr, int key_data_len, rc4_key *key)
{
int i=0;
unsigned char t=NULL;
unsigned char swapByte=NULL;
unsigned char index1;
unsigned char index2;
unsigned char* state;
short counter;
state = key-state[0];
for(counter = 0; counter 256; counter++)
state[counter] =(char) counter;
key-x = 0;
key-y = 0;
index1 = 0;
index2 = 0;
for(counter = 0; counter 256; counter++)
{
index2 = (key_data_ptr[index1] + state[counter] + index2) % 256;
swap_byte(state[counter], state[index2]);
index1 = (index1 + 1) % key_data_len;
}
}
void rc4(unsigned char *buffer_ptr, int buffer_len, rc4_key *key)
{
unsigned char t=NULL;
unsigned char x;
unsigned char y;
unsigned char* state;
unsigned char xorIndex;
short counter;
x = key-x;
y = key-y;
state = key-state[0];
for(counter = 0; counter buffer_len; counter++)
{
x = (x + 1) % 256;
y = (state[x] + y) % 256;
swap_byte(state[x], state[y]);
xorIndex = (state[x] + state[y]) % 256;
buffer_ptr[counter] ^= state[xorIndex];
}
key-x = x;
key-y = y;
}
int main()
{
struct rc4_key s;
unsigned char*seed=(unsigned char*)malloc(4);
seed=(unsigned char*)1234;
unsigned char*myinput=(unsigned char*)malloc(10);
unsigned char*temp=(unsigned char*)lixiaobo;
int i=0;
for(i=0;i10;i++)
{
myinput[i]=*(temp+i);
}
printf(*********************************************\n\n);
printf(orignal text:%s\n\n,myinput);
//加密
prepare_key(seed,4,s);
rc4(myinput,10,s);
printf(secret string:);
for(i=0;i10;i++)
{
printf(%x ,myinput[i]);
}
printf(\n\ndecrypt the secret string,the result is:);
//解密
prepare_k
文档评论(0)