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

Rijndael加密例程运行异常,解密后字节丢失的隐性Bug排查求助

问题根因

解密逻辑中读取解密后字节的时机错误:CryptoStream 处理完所有输入后,需要完成最终块的填充验证、剩余数据刷入底层流的操作,这个操作默认是在 CryptoStream 被释放(即退出using块)时才会执行。你现在在 cryptoStream 的using块内部就调用 memoryStream.ToArray(),此时最后一块解密后的数据还没写入MemoryStream,自然会出现字节丢失。

修复方案

只需要把解密阶段读取decryptedBytes的代码移到cryptoStream的using块外面即可,修改后的解密部分代码如下:

var dec = cipher.CreateDecryptor(_key, _IV);
using (var memoryStream = new MemoryStream())
{
    using (var cryptoStream = new CryptoStream(memoryStream, dec, CryptoStreamMode.Write))
    {
        cryptoStream.Write(cipherBytes, 0, cipherBytes.Length);
    }
    // 等CryptoStream释放完成后再读取全量解密字节
    decryptedBytes = memoryStream.ToArray();
}

补充说明

如果需要在不释放CryptoStream的情况下主动触发最终块处理,也可以在写完密文后主动调用 cryptoStream.FlushFinalBlock() 后再读字节,不过更推荐上述写法,靠using的释放逻辑自动处理更稳妥,避免漏调用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 12:48:03