RC4
RC4
介绍
对于RC4
,它是一种对称加密算法,并且它是一种流密码,它的明文和密钥流一样长,密钥的话,长度可以为1~256。但是密钥过短的话,会大大降低安全性,因此建议最少使用128位的密钥进行加密,否则密钥流会重复,造成随机性变低。
流密码是一个明文字节对应一个密钥字节进行异或操作进行加密。解密的话也是同样如此,如果一个明文进行两次异或会得到它本身(如果不会的话,可以取了解一下异或的操作)。
RC4
的相关变量
**1.**密钥流:明文的长度和密钥流的长度是相对应的,例如明文长500字节,那么密钥流也会长500字节。密钥流的生成取决于密钥。如果密钥小于明文的长度,那么就会循环补充,直至密钥流长度达到明文长度。例: key=’123’,明文长500,那么key_stream=’123123…..’,这个长度和明文的长度相同。
2.状态向量S
:s[i]=i
,初始的S盒
是S[0] = 0 , S[1] = 1 .....S[n]=n
3.临时向量T
:T[i] = K [i mod keylen]
(这个keylen
的长度等于密钥的长度,而不是密钥流的长度)
KSA
算法
首先生成S盒
,这个S盒
是初始的,可以参考一下上一个状态向量S
, 接着生成T
临时向量,也可以参考一下上面的。
对于明文长度为n
的时候,初始j = 0
,然后对i
进行0到n-1
的遍历。计算j = (j + S[i] + S[j]) mod n
,然后进行S[i]
和S[j]
的值进行互换。
PRGA
算法
对于经过KSA
算法得到的S盒
,把i
和j
初始化为 0 ,对r = 0
进行0~n-1的遍历。
i = (i+1) mod n
j = (j+1) mod n
,每循环一次就要进行S[i]
和S[j]
值的互换。其中t=[S[i] + S[j]] mod n
K[r] = S[t]
.得到长度为n的密钥流。
对明文进行加密和解密
因为明文长度等于密钥流长度,则可进行每一位相互对应异或
密文(c
) = key ^ m
明文(m
) = key ^ c
总结
RC4
特点
1.RC4
算法简单,易于实现。
2.算法运行速度快,便于运算
3.密钥的长度可变,明文的长度为n,则密钥的长度为1~n
RC4
代码实现
1 |
|
逻辑思维图
这个仅针对这个算法看完之后还有些模糊,可以来看一下这个