【问题标题】:Create a Stream that encrypt data read创建一个加密数据读取的流
【发布时间】:2014-09-17 11:53:45
【问题描述】:

我正在尝试在构造函数中创建一个接收底层流的流,并在我们读取数据时自动加密数据。 目标是当我们从 EncryptingStream 读取时: - 它读取底层流 - 它加密从底层流中读取的字节 - 它返回加密的字节

我当前的代码如下所示:

public class EncryptingStream : BaseCryptographicStream
{
    protected CryptoStream _current;
    protected ICryptoTransform _transform;
    protected Stream _underlyingStream;

    #region CTor
    public EncryptingStream(Stream source, string encryptionKey)
        : base(target)
    {
        this._underlyingStream = source;
        this.Initialize(encryptionKey);
    }
    #endregion


    protected void Initialize(string encryptionKey)
    {
        var input = CryptoTools.GenerateAlgorithmInputs(encryptionKey);

        RijndaelManaged rijndael = new RijndaelManaged();
        rijndael.Mode = CipherMode.CBC;
        rijndael.Key = input[0];
        rijndael.IV = input[1];

        this._transform = rijndael.CreateEncryptor();
        this._current = new CryptoStream(this._underlyingStream, this._transform, CryptoStreamMode.Write);
    }

    public override int Read(byte[] buffer, int offset, int count)
    {
        ??
    }
}

注意:BaseCryptographicStream继承Stream并实现上面类没有实现的Stream抽象成员。

我的问题是我无法实现 Read 方法。
我不能将 CryptoStream 用作此流写入输出流。
我想我必须使用 ICryptoTransform 对象,但我不知道如何正确阅读。这里的问题是加密和未加密数据的长度不匹配。因此从底层流中读取的缓冲区的大小将与提供给 EncryptingStream 的缓冲区的大小不同。

有人知道这种流是可能的吗,有什么想法吗?

更新 1:我在这里尝试解决的问题是 WCF 流。我将(大)文件流式传输到 WCF,并且不想将整个文件放入内存中。 使用 CryptoStream 意味着我必须使用中间 MemoryStream 来加密内容,这意味着整个文件将在内存中

【问题讨论】:

  • 您是否考虑过使用标准 CryptoStream?见msdn.microsoft.com/en-us/library/…
  • 是的,CryptoStream 写入输出流,这与我在这里尝试做的相反。目标是通过网络流式传输大文件,而不是在加密之前将所有文件都放入内存中。
  • 我已编辑我的问题以添加有关上下文的更多信息
  • 要使用 CryptoStream 进行读取,只需使用 CryptoStreamMode.Read 构造它。见msdn.microsoft.com/en-us/library/… 和msdn.microsoft.com/en-us/library/…
  • 我在网上找到的每个样本都使用写入进行加密,使用读取进行解密。你的意思是我们可以使用读取+加密吗?

标签: c# .net encryption stream rijndaelmanaged


【解决方案1】:

不要自己滚动,只需使用标准的CryptoStream 类。要启用从中读取,请在构造函数调用中使用CryptoStreamMode.Read。

【讨论】:

    猜你喜欢
    • 2022-06-29
    • 2019-01-21
    • 1970-01-01
    • 2018-11-26
    • 1970-01-01
    • 2017-11-10
    • 1970-01-01
    • 2013-02-21
    • 2017-11-02
    相关资源
    最近更新 更多