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

AES CBC蒙特卡洛测试(MCT)解密实现异常问题排查求助

错误原因

你在适配解密代码时错误修改了CBC模式解密的IV参数,不符合CBC解密的链式逻辑,也不符合NIST MCT测试的规则。
加密代码中j≥1时的加密调用如下,第二个参数为CBC加密的IV,取上一轮输出的密文,符合规则:

ct = encrypt(key_array[0], ct_array[j - 1], pt_array[j])

但你写解密代码时,错误将该IV参数替换为了上一轮输出的明文pt_array[j - 1],导致解密链式计算完全错误。

修正后的解密代码

只需要修改循环内j≥1分支的decrypt调用的第二个参数即可,修正后的完整函数如下:

def monte_carlo_decrypt(key_len, initial_key, initial_iv, initial_ct):
    key_array = []
    iv_array = []
    pt_array = []
    ct_array = []

    key_array.append(bytes.fromhex(initial_key))
    iv_array.append(bytes.fromhex(initial_iv))
    ct_array.append(bytes.fromhex(initial_ct))

    for j in range(0, 1000):
        if j == 0:
            pt = decrypt(key_array[0], iv_array[0], ct_array[j])
            pt_array.append(pt)
            ct_array.append(iv_array[0])
        else:
            # 仅修改这一行的IV参数为ct_array[j-1]即可
            pt = decrypt(key_array[0], ct_array[j - 1], ct_array[j])
            pt_array.append(pt)
            ct_array.append(pt_array[j - 1])

    if key_len == 128:
        key_array.append(bytes(a ^ b for a, b in zip(key_array[0], pt_array[j])))
    elif key_len == 256:
        key_array.append(bytes(a ^ b for a, b in zip(key_array[0], pt_array[j - 1] + pt_array[j])))

    iv_array.append(pt_array[-1])
    ct_array.clear()
    ct_array.append(pt_array[-2])

    return key_array[-1], iv_array[-1], pt_array[-1], ct_array[-1]

for k in range(0, 100):
    (next_key, next_iv, next_pt, next_ct) = monte_carlo_decrypt(key_len * 8,
                                                                key.hex().upper(),
                                                                iv.hex().upper(),
                                                                given_ct.hex().upper())
     key = next_key
     iv = next_iv
     given_ct = next_ct

修改后使用你给出的测试参数运行,输出的PT就会符合预期值。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 13:39:03