密码小组作业
RC4
简介
RC4是一种对称密码算法,它属于对称密码算法中的序列密码(streamcipher,也称为流密码),它是可变密钥长度,面向字节操作的流密码。
RC4是流密码中的一种,为序列密码。RC4加密算法是Ron Rivest在1987年设计出的密钥长度可变的加密算法簇。起初该算法是商业机密,直到1994年,它才公诸于众。由于RC4具有算法简单,运算速度快,软硬件实现都十分容易等优点,使其在一些协议和标准里得到了广泛应用。
流密码也属于对称密码,但与分组加密算法不同的是,流密码不对明文数据进行分组,而是用密钥生成与明文一样长短的密码流对明文进行加密,加解密使用相同的密钥。
算法内容
RC4算法加密流程:包括密钥调度算法KSA和伪随机子密码生成算法PRGA两大部分(以密钥长度为256个字节为例)。
步骤:
初始化S表
- 对S表线性填充,一般为256字节

使用key密钥通过密钥调度算法KSA初始置换S表
1
2
3
4
5
6具体就是: j = (j + S[i] + key [i % key.length]) % 256
然后交换 S[i] 与 S[j] 的值
最终得到新的S表
由于Java的byte类型是有符号的(范围:-128到127),但我们需要的是无符号值(0到255)。
& 0xFF 的作用是截取低8位,丢弃符号位扩展的高位,得到正确的无符号值。
密钥流的生成(为明文每个字节生成一个伪随机数)
伪随机数生成算法:
1
2
3
4i = (i + 1) mod 256
j = (j + S[i]) mod 256
swap S[i] and S[j]
K = S[(S[i] + S[j]) mod 256]之后将明文与K进行异或即可
加解密:
因为:
1
2
3明文 ^ K = 密文
密文 ^ K = 明文
所以RC4加解密是一致的运行

本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 ᕙ(• ॒ ູ•)ᕘ欢迎光临ᕙ(`▿´)ᕗ!




