0
我正在使用Rijndael來加密/解密一些文檔。我想知道是否有一個C#實現允許多線程使用算法,無論是手動或使用Parallel
框架?我認爲這是不可能的,因爲它是基於流(CryptoStream
),但值得一問。 有沒有人有消息來檢查?Rijndael算法和CryptoStream:是否可以加密/解密多線程?
我正在使用Rijndael來加密/解密一些文檔。我想知道是否有一個C#實現允許多線程使用算法,無論是手動或使用Parallel
框架?我認爲這是不可能的,因爲它是基於流(CryptoStream
),但值得一問。 有沒有人有消息來檢查?Rijndael算法和CryptoStream:是否可以加密/解密多線程?
我從來沒有聽說過.NET中的多線程CryptoStream,但是,我認爲這取決於你的加密模式。 如果加密模式是ECB,當然,您可以使用Parallel.For或ForEach手動輕鬆地對其進行多線程處理。使用CBC或任何其他帶反饋的加密模式,除非您使用多個初始化向量,否則不太可能使其平行。 對於ECB模式:
所以,我的想法是不使用CryptoStream,而是你必須調用加密API並直接操作純文本字節。
這是使用太多的內存。最好有兩個或更多的流,每個流都是文件的一部分。 – Krumelur
@Krumelur是的,你沒有創建字節數組,你可以啓動多個流(例如,從不同文件位置開始以共享模式讀取文件)。對於ECB模式,加密文件的順序無關緊要,這就是ECB模式適用於並行化的原因。因此,創建10個ECB CryptoStream實例並將它們提供給Parallel.ForEach也是解決方案。但是,必須注意並禁用自動填充,否則CryptoStream將填充10個或更多線程中的每個線程,並在文件中寫入額外的塊。填充必須禁用。 – Vitaliy
聽起來很有趣。你有沒有嘗試過,或者它是簡單的理論? (如果你知道它正在工作,我會盡早試用它,如果它是理論的話,我現在不得不推遲它) – Krumelur