gpt4 book ai didi

c# - 如何解密几个片段中的大缓冲区?充气城堡,AES/CTR/NoPadding

转载 作者:行者123 更新时间:2023-11-30 17:06:54 31 4
gpt4 key购买 nike

我认为我的问题需要一些我可能不具备的基本知识。

我正在解密这样的字节数组:

var cipher = CipherUtilities.GetCipher("AES/CTR/NoPadding");
cipher.Init(false, new ParametersWithIV(new KeyParameter(bkey), bIV));
byte[] DecryptedChunk = cipher.ProcessBytes(EncryptedChunk, 0, ChunkSize);

我想了解如何将这个缓冲区分成 2 部分,然后解密前半部分和后半部分。

如果我只是那样做:

var cipher = CipherUtilities.GetCipher("AES/CTR/NoPadding");
cipher.Init(false, new ParametersWithIV(new KeyParameter(bkey), bIV));
byte[] FirstDecryptedChunk = cipher.ProcessBytes(FirstEncryptedChunk, 0, FirstChunkSize);
byte[] SecondDecryptedChunk = cipher.ProcessBytes(SecondEncryptedChunk, 0, SecondChunkSize);

那么第一个Chunk是可以的,但是第二个是错误的。

我花了大约 6 个小时在互联网上阅读,我找不到解释。与某种必须更新的计数器和 IV 或其他什么有关?

最佳答案

也许这里有些困惑,因为 BC C# 版本当前提供 CTR 模式作为 block 密码,即 BufferedBlockCipher,尽管它应该(也)作为流密码可用,即 BufferedStreamCipher。

为了获得完整的输出,您应该在所有其他处理之后调用 DoFinal 方法之一(基于密码)。密码一次缓冲一个 block 的输入,一旦它知道你已经完成,只能输出部分块。

最好调用 DoFinal,即使它是 BufferedStreamCipher,以指示底层密码进行清理并为另一次运行重置。

关于c# - 如何解密几个片段中的大缓冲区?充气城堡,AES/CTR/NoPadding,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14995640/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com