在.Net中获取CryptoStream的长度

Bah*_*ïka 6 .net c# vb.net encryption stream

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

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

Ada*_*SFT 5

这说起来比我可以http://www.obviex.com/Articles/CiphertextSize.aspx好得多

从那里:

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

CipherText = PlainText +块-(PlainText MOD块)

其中,CipherText,PlainText和Block分别指示密文,明文和加密块的大小。基本上,将所得的密文大小计算为扩展到下一个块的明文的大小。如果使用填充,并且明文的大小是块大小的精确倍数,则会添加一个包含填充信息的额外块。

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

CipherText = 9 + 16-(9 MOD 16)= 9 + 16-9 = 16(字节)

请注意,如果纯文本值的大小是块大小的正整数倍,则包含填充信息的额外块将被附加到密文中。例如,如果要加密16位信用卡号(定义为16个字符的ASCII字符串),则密文的大小将为:

CipherText = 16 + 16-(16 MOD 16)= 16 + 16-0 = 32(字节)

  • 尽管从理论上讲这可以回答问题,但[更可取的是](http://meta.stackexchange.com/q/8259)在此处包括答案的基本部分,并提供链接以供参考。 (2认同)