173 2438 5004
KEROS加密芯片——品牌直销 | 免费样品 | 技术支持
当前位置:网站首页 > 资讯中心 正文 资讯中心

rc4加密算法详解

keros@mark 2022-10-27 资讯中心

本篇文章给大家谈谈rc4加密算法详解以及对应的知识点,希望对各位有所帮助。

本文目录一览

什么是RC4、RC5、aes?

aes加密算法

aes加密算法原理

随着对称密码的发展,DES数据加密标准算法由于密钥长度较小(56位),已经不适应当今分布式开放网络对数据加密安全性的要求,因此1997年NIST公开征集新的数据加密标准,即aes[1]。经过三轮的筛选,比利时Joan Daeman和Vincent Rijmen提交的Rijndael算法被提议为aes的最终算法。此算法将成为美国新的数据加密标准而被广泛应用在各个领域中。尽管人们对aes还有不同的看法,但总体来说,aes作为新一代的数据加密标准汇聚了强安全性、高性能、高效率、易用和灵活等优点。aes设计有三个密钥长度:128,192,256位,相对而言,aes的128密钥比DES的56密钥强1021倍[2]。aes算法主要包括三个方面:轮变化、圈数和密钥扩展。本文以128为例,介绍算法的基本原理;结合AVR汇编语言,实现高级数据加密算法aes。

aes是分组密钥,算法输入128位数据,密钥长度也是128位。用Nr表示对一个数据分组加密的轮数(加密轮数与密钥长度的关系如表1所列)。每一轮都需要一个与输入分组具有相同长度的扩展密钥Expandedkey(i)的参与。由于外部输入的加密密钥K长度有限,所以在算法中要用一个密钥扩展程序(Keyexpansion)把外部密钥K扩展成更长的比特串,以生成各轮的加密和解密密钥。

1.1圈变化

aes每一个圈变换由以下三个层组成:

非线性层——进行Subbyte变换;

线行混合层——进行ShiftRow和MixColumn运算;

密钥加层——进行AddRoundKey运算。

① Subbyte变换是作用在状态中每个字节上的一种非线性字节转换,可以通过计算出来的S盒进行映射。

② ShiftRow是一个字节换位。它将状态中的行按照不同的偏移量进行循环移位,而这个偏移量也是根据Nb的不同而选择的[3]。

③ 在MixColumn变换中,把状态中的每一列看作GF(28)上的多项式a(x)与固定多项式c(x)相乘的结果。 b(x)=c(x)*a(x)的系数这样计算:*运算不是普通的乘法运算,而是特殊的运算,即 b(x)=c(x)·a(x)(mod x4+1) 对于这个运算 b0=02。a0+03。a1+a2+a3 令xtime(a0)=02。a0其中,符号“。”表示模一个八次不可约多项式的同余乘法[3]。

对于逆变化,其矩阵C要改变成相应的D,即b(x)=d(x)*a(x)。

④ 密钥加层运算(addround)是将圈密钥状态中的对应字节按位“异或”。

⑤ 根据线性变化的性质[1],解密运算是加密变化的逆变化。这里不再详细叙述。

1.2轮变化

对不同的分组长度,其对应的轮变化次数是不同的,如表1所列。

1.3密钥扩展

aes算法利用外部输入密钥K(密钥串的字数为Nk),通过密钥的扩展程序得到共计4(Nr+1)字的扩展密钥。它涉及如下三个模块:① 位置变换(rotword)——把一个4字节的序列[A,B,C,D]变化成[B,C,D,A];② S盒变换(subword)——对一个4字节进行S盒代替;③ 变换Rcon——Rcon表示32位比特字[xi-1,00,00,00]。这里的x是(02),如 Rcon[1]=[01000000];Rcon[2]=[02000000];Rcon[3]=[04000000]…… 扩展密钥的生成:扩展密钥的前Nk个字就是外部密钥K;以后的字W[]等于它前一个字W[[i-1]]与前第Nk个字W[[i-Nk]]的“异或”,即W[]=W[[i-1]]W[[i- Nk]]。但是若i为Nk的倍数,则W=W[i-Nk]Subword(Rotword(W[[i-1]]))Rcon[i/Nk]。

aes的加密与解密流程如图1所示。

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;i256;i++) {        s[i]=i;        k[i]=key[i%Len];    }    for(i=0;i256;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;kLen;k++)    {        i=(i+1)%256;        j=(j+s[i])%256;        tmp=s[i];        s[i]=s[j];//交换s[x]和s[y]        s[j]=tmp;        t=(s[i]+s[j])%256;        Data[k]^=s[t];    }}最后,在main函数中,调用顺序如下: int main(){unsigned char s[256]={0},s2[256]={0};//S-boxchar key[256]={justfortest};char pData[512]=这是一个用来加密的数据Data;unsigned long len=strlen(pData);int i;printf(pData=%s\n,pData);printf(key=%s,length=%d\n\n,key,strlen(key));rc4_init(s,(unsigned char*)key,strlen(key));//已经完成了初始化printf(完成对S[i]的初始化,如下:\n\n);for(i=0;i256;i++){    printf(%02X,s[i]);    if(i(i+1)%16==0)putchar('\n');}printf(\n\n);for(i=0;i256;i++)//用s2[i]暂时保留经过初始化的s[i],很重要的!!!{    s2[i]=s[i];}printf(已经初始化,现在加密:\n\n);rc4_crypt(s,(unsigned char*)pData,len);//加密printf(pData=%s\n\n,pData);printf(已经加密,现在解密:\n\n);//rc4_init(s,(unsigned char*)key,strlen(key));//初始化密钥rc4_crypt(s2,(unsigned char*)pData,len);//解密printf(pData=%s\n\n,pData);return0;}因此最终的完整程序是: //程序开始#includestdio.h#includestring.htypedef 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; i256; i++)    {        s[i] = i;        k[i] = key[i%Len];    }    for (i = 0; i256; 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; kLen; k++)    {        i = (i + 1) % 256;        j = (j + s[i]) % 256;        tmp = s[i];        s[i] = s[j];//交换s[x]和s[y]        s[j] = tmp;        t = (s[i] + s[j]) % 256;        Data[k] ^= s[t];    }}int main(){    unsigned char s[256] = { 0 }, s2[256] = { 0 };//S-box    char key[256] = { justfortest };    char pData[512] = 这是一个用来加密的数据Data;    unsigned long len = strlen(pData);    int i;    printf(pData=%s\n, pData);    printf(key=%s,length=%d\n\n, key, strlen(key));    rc4_init(s, (unsigned char*)key, strlen(key));//已经完成了初始化    printf(完成对S[i]的初始化,如下:\n\n);    for (i = 0; i256; i++)    {        printf(%02X, s[i]);        if (i  (i + 1) % 16 == 0)putchar('\n');    }    printf(\n\n);    for (i = 0; i256; i++)//用s2[i]暂时保留经过初始化的s[i],很重要的!!!    {        s2[i] = s[i];    }    printf(已经初始化,现在加密:\n\n);    rc4_crypt(s, (unsigned char*)pData, len);//加密    printf(pData=%s\n\n, pData);    printf(已经加密,现在解密:\n\n);    //rc4_init(s,(unsignedchar*)key,strlen(key));//初始化密钥    rc4_crypt(s2, (unsigned char*)pData, len);//解密    printf(pData=%s\n\n, pData);    return 0;}//程序完

求RC4算法的原理,最好用通俗的语言讲解,能打下比方更好了(本人能看懂一点VB跟C)

RC4经典加密算法VB版本代码

VB版rc4算法

Public Sub main()

Dim key As String

For i = 1 To 16

Randomize

key = key Chr(Rnd * 255)

Next i

MsgBox RC4(RC4("Welcome To Plindge Studio!", key), key)

End Sub

Public Function RC4(inp As String, key As String) As String

Dim S(0 To 255) As Byte, K(0 To 255) As Byte, i As Long

Dim j As Long, temp As Byte, Y As Byte, t As Long, x As Long

Dim Outp As String

For i = 0 To 255

S(i) = i

Next

j = 1

For i = 0 To 255

If j Len(key) Then j = 1

K(i) = Asc(Mid(key, j, 1))

j = j + 1

Next i

j = 0

For i = 0 To 255

j = (j + S(i) + K(i)) Mod 256

temp = S(i)

S(i) = S(j)

S(j) = temp

Next i

i = 0

j = 0

For x = 1 To Len(inp)

i = (i + 1) Mod 256

j = (j + S(i)) Mod 256

temp = S(i)

S(i) = S(j)

S(j) = temp

t = (S(i) + (S(j) Mod 256)) Mod 256

Y = S(t)

Outp = Outp Chr(Asc(Mid(inp, x, 1)) Xor Y)

Next

RC4 = Outp

End Function

产品的开发快则一个月,慢则一年,那么如何杜绝市面上各种山寨也成为了我们必须要关注的问题,加密芯片可以做到这点,在保障开发者权益的同时也保护了消费者权益,KEROS加密芯片作为该领域的领头者,一直在尽力贡献一份力。特点如下:接口:标准I2C协议接口;算法: 标准aes256 / KAS算法;特殊接口:Random Stream Cipher for Interface;工作温度:工业级 -40℃ ~+85℃;频率:400Khz;存储:2K字节EEPROM(可选);电压:1.8V~3.6V;封装:SOT23-6,SOP8,TDFN-6。rc4加密算法详解的介绍就聊到这里吧,感谢你花时间阅读本站内容,谢谢。

本文标签:rc4加密算法详解

产品列表
产品封装
友情链接