Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Rijndael算法和加密流:可以加密/解密多线程吗?_C#_.net_Multithreading_Encryption - Fatal编程技术网

C# Rijndael算法和加密流:可以加密/解密多线程吗?

C# Rijndael算法和加密流:可以加密/解密多线程吗?,c#,.net,multithreading,encryption,C#,.net,Multithreading,Encryption,我正在使用Rijndael加密/解密一些文档。我想知道是否有一个C#实现,它允许多线程使用该算法,可以手动使用,也可以使用Parallel框架?我认为这是不可能的,因为它是基于流的(CryptoStream),但仍然值得一问。 有人要检查源代码吗?我从来没有听说过.NET中的多线程加密流,但是,我认为这取决于您的加密模式。 当然,如果加密模式是ECB,您可以使用Parallel.For或ForEach轻松地手动将其设置为多线程。 使用CBC或任何其他带有反馈的加密模式,不太可能使其并行,除非使用

我正在使用Rijndael加密/解密一些文档。我想知道是否有一个C#实现,它允许多线程使用该算法,可以手动使用,也可以使用
Parallel
框架?我认为这是不可能的,因为它是基于流的(
CryptoStream
),但仍然值得一问。
有人要检查源代码吗?

我从来没有听说过.NET中的多线程加密流,但是,我认为这取决于您的加密模式。 当然,如果加密模式是ECB,您可以使用Parallel.For或ForEach轻松地手动将其设置为多线程。 使用CBC或任何其他带有反馈的加密模式,不太可能使其并行,除非使用多个初始化向量。 对于ECB模式:

  • 将数据拆分为多个字节数组(假设您使用10个线程加密1280个字节,将数据拆分为包含0..127字节、128..255字节等的10字节数组,每个数组必须包含整数个块)
  • 使用Parallel.For或ForEach循环所有10字节数组(例如,创建列表实例并将其作为参数提供给Parallel.ForEach)
  • 使用SymmetricAlgorithm.CreateEncryptor/SymmetricAlgorithm.CreateDecryptor创建10个Rijndael encryptor/decryptor实例
  • 在单独的线程上加密数据的每个部分
  • 再次将数据合并到1000字节数组

因此,我的想法不是使用CryptoStream,而是必须调用加密API并直接操作纯文本字节。

这占用了太多内存。最好有两个或更多的流,每个流都是文件的一部分。@Krumelur是的,您是对的,您可以启动多个流,而不是创建字节数组(例如,从不同的文件位置开始以共享模式读取文件)。对于ECB模式,加密文件的顺序无关紧要,这就是ECB模式适合并行化的原因。所以,创建10个ECB CryptoStream实例并将其交给Parallel.ForEach也是一个解决方案。但是,您必须注意并禁用自动填充,否则CryptoStream将填充10个或更多线程中的每个线程,并在文件中写入额外的块。必须禁用填充。听起来很有趣。你试过了吗?还是纯理论?(如果你知道它在起作用,我会早一点尝试,而不是晚一点。如果这是理论,我将不得不暂时推迟)欧洲央行不安全。CTR模式可以并行化,只需稍微小心,而且更安全。CTR模式加密使用密码流,您可以对纯文本进行异或(XOR)(用于编码和解码)。因此,您可以有一个缓冲区,该缓冲区由多个线程填充,每个线程持有密钥的副本。然后,您只需使用密码文本对文档中的数据进行异或运算。也许IO将成为无障碍的瓶颈,但这是超越这个问题的。