永发信息网

RC4的原理

答案:1  悬赏:20  手机版
解决时间 2021-01-26 13:58
RC4的原理
最佳答案

RC4算法的原理很简单,包括初始化算法(KSA)和伪随机子密码生成算法(PRGA)两大部分。假设S-box的长度为256,密钥长度为Len。先来看看算法的初始化部分(用C代码表示):
其中,参数1是一个256长度的char型数组,定义为: unsigned char sBox[256];
参数2是密钥,其内容可以随便定义:char key[256];
参数3是密钥的长度,Len = strlen(key); void rc4_init(unsigned char*s,unsigned char*key, unsigned long Len){    int i=0,j=0;    char k[256]={0};    unsigned char tmp=0;    for(i=0;i<256;i++) {        s[i]=i;        k[i]=key[i%Len];    }    for(i=0;i<256;i++) {        j=(j+s[i]+k[i])%256;        tmp=s[i];        s[i]=s[j];//交换s[i]和s[j]        s[j]=tmp;    }}在初始化的过程中,密钥的主要功能是将S-box搅乱,i确保S-box的每个元素都得到处理,j保证S-box的搅乱是随机的。而不同的S-box在经过伪随机子密码生成算法的处理后可以得到不同的子密钥序列,将S-box和明文进行xor运算,得到密文,解密过程也完全相同。
再来看看算法的加密部分(用C代码表示):
其中,参数1是上边rc4_init函数中,被搅乱的S-box;
参数2是需要加密的数据data;
参数3是data的长度. void rc4_crypt(unsigned char*s,unsigned char*Data,unsigned long Len){    int i=0,j=0,t=0;    unsigned long k=0;    unsigned char tmp;    for(k=0;k ,pData);printf(key=%s,length=%d

,key,strlen(key));rc4_init(s,(unsigned char*)key,strlen(key));//已经完成了初始化printf(完成对S[i]的初始化,如下:

);for(i=0;i<256;i++){    printf(%02X,s[i]);    if(i&&(i+1)%16==0)putchar('
');}printf(

);for(i=0;i<256;i++)//用s2[i]暂时保留经过初始化的s[i],很重要的!!!{    s2[i]=s[i];}printf(已经初始化,现在加密:

);rc4_crypt(s,(unsigned char*)pData,len);//加密printf(pData=%s

,pData);printf(已经加密,现在解密:

);//rc4_init(s,(unsigned char*)key,strlen(key));//初始化密钥rc4_crypt(s2,(unsigned char*)pData,len);//解密printf(pData=%s

,pData);return0;}因此最终的完整程序是: //程序开始#include#includetypedef unsigned longULONG;void rc4_init(unsigned char*s, unsigned char*key, unsigned long Len){    int i = 0, j = 0;    char k[256] = { 0 };    unsigned char tmp = 0;    for (i = 0; i<256; i++)    {        s[i] = i;        k[i] = key[i%Len];    }    for (i = 0; i<256; i++)    {        j = (j + s[i] + k[i]) % 256;        tmp = s[i];        s[i] = s[j];//交换s[i]和s[j]        s[j] = tmp;    }}void rc4_crypt(unsigned char*s, unsigned char*Data, unsigned long Len){    int i = 0, j = 0, t = 0;    unsigned long k = 0;    unsigned char tmp;    for (k = 0; k , pData);    printf(key=%s,length=%d

, key, strlen(key));    rc4_init(s, (unsigned char*)key, strlen(key));//已经完成了初始化    printf(完成对S[i]的初始化,如下:

);    for (i = 0; i<256; i++)    {        printf(%02X, s[i]);        if (i && (i + 1) % 16 == 0)putchar('
');    }    printf(

);    for (i = 0; i<256; i++)//用s2[i]暂时保留经过初始化的s[i],很重要的!!!    {        s2[i] = s[i];    }    printf(已经初始化,现在加密:

);    rc4_crypt(s, (unsigned char*)pData, len);//加密    printf(pData=%s

, pData);    printf(已经加密,现在解密:

);    //rc4_init(s,(unsignedchar*)key,strlen(key));//初始化密钥    rc4_crypt(s2, (unsigned char*)pData, len);//解密    printf(pData=%s

, pData);    return 0;}//程序完

我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
怎么计算不同分母的分数加法,还有分数混合运
小憩咖啡酒吧地址在什么地方,我要处理点事
成语踵事增华的意思是什么啊?有知道释义的请
网上通缉要什么证据?
随意问问谢谢大家酷我酷狗自己唱歌别人送的金
直线l外有一点A,点A到l的距离是5cm,点P是直
对于进行有性生殖的生物体来说,维持每种生物
城邦—城市的乌托邦地址好找么,我有些事要过
在三角形ABC 中,∠C=90°,周长为24cm,斜边上
苹果6sp为什么看电影自动关机重启
成语正言厉色的意思是什么啊?有知道释义的请
暗恋一个人,却不知道怎么说
平凡的世界中的田润叶人生经历了哪些事 如何
准备去新疆旅游,包 车有哪些车型可以选择?
求小说名字。男主姓百里。女主穿越+空间+修仙
推荐资讯
成语忠贞不渝的意思是什么啊?有知道释义的请
我腿酸脚麻是怎么回事
成语助人下石的意思是什么啊?有知道释义的请
疮疤字的拼音怎么写
相亲男放了我的鸽子,是不是没戏了?
2016海南特岗教师招聘笔试内容
男生,十七岁。最近一段时间肚子有点鼓,用手
加油站(东小庄村)地址在什么地方,想过去办事
考研学校代码是如何编排的含义
【TG吧】...码表QWE=ABC依次类推.那么解码GZG
墟棘的意思是什么啊?知道的请说下!
有姓诺的吗
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?