You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现mod 32规则下fake-RC4加密并通过异或生成密文

Fake-RC4 加密实现方案

原有代码问题

原fake_rc4函数存在两个核心问题:

  • 每次调用都会重置i、j变量,无法保存流密码生成过程的状态,无法生成连续的密钥流
  • 仅返回了密钥流索引t,没有取出S盒中对应位置的有效密钥字节,无法直接用于异或运算

完整实现代码

def get_prg(plaintext_size, k):
    j = 0
    S = list(range(32))
    for i in range(32):
        j = (j + S[i] + ord(k[i % len(k)])) % 32
        S[i], S[j] = S[j], S[i]
    return S

def prg_generator(S):
    # 维护PRG运行状态,连续生成密钥流字节
    i = 0
    j = 0
    while True:
        i = (i + 1) % 32
        j = (j + S[i]) % 32
        S[i], S[j] = S[j], S[i]
        t = (S[i] + S[j]) % 32
        yield S[t]

def encrypt(plaintext, k):
    # 1. 生成初始S盒
    S = get_prg(len(plaintext), k)
    # 2. 初始化密钥流生成器
    ks_gen = prg_generator(S)
    cipher = []
    for c in plaintext:
        # 3. 逐字符异或加密,结果按要求mod32
        ks_byte = next(ks_gen)
        cipher_byte = (ord(c) ^ ks_byte) % 32
        cipher.append(chr(cipher_byte))
    return ''.join(cipher)

逻辑说明

符合题目要求的mod32运算规则,实现步骤和题目要求完全对齐:

  1. 密钥调度(KSA):通过get_prg完成S盒的初始置换,所有运算对32取模
  2. 密钥流生成(PRGA):通过生成器保存i、j的运行状态,每次按规则生成一个有效密钥流字节
  3. 逐位加密:遍历明文所有字符,和对应密钥流字节做异或运算,结果对32取模后转为字符,拼接得到最终密文

内容的提问来源于stack exchange,提问作者Amit Hadad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.10 12:00:03