2010-07-21 100 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類。