【问题标题】:Rijndael File Chunk Encryption?Rijndael 文件块加密?
【发布时间】:2010-07-21 19:17:02
【问题描述】:

我正在编写一个读取文件并使用 Rijndael 算法进行加密的 C# 类。

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

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

【问题讨论】:

  • 你拼错了 Rijndael(我为你更正了)。
  • 你这样做是为了个人启蒙吗?有很多可用于 C# 的加密库。
  • 没有理由耗尽内存。您是通过流式传输文件,还是一次性将其加载到内存中?
  • 我只是假设 OP 正在使用 System.Security.Cryptography 类。

标签: c# encryption


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    我认为,问题可能出在您的实现而不是加密方法上。

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

    一般来说,你的实现应该是:

    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
    

    【讨论】:

    • @Marcelo Cantos:感谢您纠正错字。 @Skizz:感谢伪代码。正如您提到的,这是应用程序逻辑的问题。一些使用过的流未关闭,导致 OutOfMemoryException。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多