2010-07-21 56 views
1

我在写一个C#类,它读取一个文件并使用Rijndael算法进行加密。Rijndael文件组块加密?

使用600MB文件进行测试时,我得到OutOfMemoryException,因此计划以每个10MB的小块读取文件。现在的问题是,对于其字节被加密为小块的文件,解密过程失败。

我的问题是,Rijndael加密是否支持加密小块数据?

+0

你拼错的Rijndael(我纠正它给你)。 – 2010-07-21 11:14:18

+0

你是否正在为此进行个人熏陶? C#有很多可用的加密库。 – 2010-07-21 11:15:42

+0

没有理由耗尽内存。您是通过流式传输文件,还是一次性将文件加载到内存中? – 2010-07-21 11:16:41

回答

1

Rinjadel是一个基于块的加密系统,所以它只能处理一小块数据 - 一次128位。您可以将块的输出用作下一个块的输入。

我认为,也许问题出在你的实现中,而不是加密方法。

发布一些代码将有所帮助。

一般来说,你的implmentation应该是:

while (read 128bits from input) 
{ 
    transform 
    write 128 bits to output 
} 

if encrypting 
    write number of bits remaining 
    read remaining data 
    pad to 128 bits 
    transform 
    write 128 bits 
else 
    read number of bits left 
    read 128 bits 
    transform 
    write number of bits left bits 
+0

@ Marcelo Cantos:感谢您纠正错字。 @Skizz:谢谢你的伪代码。正如你所提到的那样,它是应用程序逻辑的一个问题。一些使用过的流没有关闭,导致OutOfMemoryException。 – AbrahamJP 2010-07-22 09:32:45

2

是的,它的确如此,您应该使用CryptoStream类。