gpt4 book ai didi

c# - 在 .Net 中获取 CryptoStream 的长度

转载 作者:太空狗 更新时间:2023-10-29 21:41:13 24 4
gpt4 key购买 nike

我正在开发加密/解密文件的软件。我希望能够猜测加密后数据的长度,但我不能使用 CryptoStream.Length(它会抛出 NotSupportedException)。有什么办法可以猜出来吗?

我正在使用 RijndaelManaged(.Net Framework 4.0)

最佳答案

这比我说的好多了 http://www.obviex.com/Articles/CiphertextSize.aspx

从那里:

在最一般的情况下,密文的大小可以计算为:

CipherText = PlainText + Block - (PlainText MOD Block)

其中CipherText、PlainText、Block分别表示密文、明文和加密 block 的大小。基本上,生成的密文大小被计算为扩展到下一个 block 的明文的大小。如果使用填充并且明文的大小恰好是 block 大小的倍数,则将添加一个包含填充信息的额外 block 。

假设您要使用具有 128 位(16 字节) block 大小和 PKCS #7 填充的 Rijndael 加密算法来加密一个九位数的社会保险号 (SSN)。 (为了说明的目的,假设在加密之前从 SSN 值中删除了破折号,因此“123-45-6789”变为“123456789”,并且该值被视为字符串,而不是数字。)如果 SSN 中的数字定义为 ASCII 字符,则密文的大小可以计算为:

密文 = 9 + 16 - (9 MOD 16) = 9 + 16 - 9 = 16(字节)

请注意,如果明文值的大小恰好是 block 大小的倍数,则包含填充信息的额外 block 将附加到密文。例如,如果您要加密一个 16 位信用卡号(定义为 16 个字符的 ASCII 字符串),则密文的大小将为:

密文 = 16 + 16 - (16 MOD 16) = 16 + 16 - 0 = 32(字节)

关于c# - 在 .Net 中获取 CryptoStream 的长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7907359/

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