huolong blog

RC4算法详解

RC4加密算法(Rivest Cipher 4)是大名鼎鼎的RSA三人组中的头号人物 Ron Rivest 在 1987 年设计的密钥长度可变的流加密算法簇,之所以称其为簇,是由于其核心部分的S-box长度可为任意,但一般为256字节。它是有线等效加密(WEP)中采用的加密算法,也曾经是TLS可采用的算法之一。但是现在 RC4 已经不再安全。

算法原理

流密码算法的核心在于密钥流的生成,RC4 的密钥流生成过程主要有两步:

  1. 根据 key 生成 S-Box。
  2. 根据 S-Box 生成密钥流 因为整体原理并不复杂,直接附上 Python 源码:
def rc4(key, data):
    S = list(range(256))
    j = 0
    out = []

    # Key-scheduling algorithm
    for i in range(256):
        j = (j + S[i] + key[i % len(key)]) % 256
        S[i], S[j] = S[j], S[i]

    # Pseudo-random generation algorithm
    i = j = 0
    for char in data:
        i = (i + 1) % 256
        j = (j + S[i]) % 256
        S[i], S[j] = S[j], S[i]
        out.append(chr(ord(char) ^ S[(S[i] + S[j]) % 256]))

    return  "".join(out)