cryptostream:为什么cryptoStreamMode.write将其加密和cryptoStreamMode.



让e ='密码',我将其转换为cryptostream中的'as9kio0736'。

让D ='AS9KIO0736',我将其转换为cryptostream中的密码。

当我将D转换回"密码"时,为什么不考虑在加密流中写作?

using (MemoryStream msEncrypt = new MemoryStream()) {
    using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write)) {
        using (StreamWriter swEncrypt = new StreamWriter(csEncrypt)) {
            swEncrypt.Write(plainText);
        }
    }
}
using (MemoryStream msDecrypt = new MemoryStream(cipherText)) {
    using (CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read)) {
        using (StreamReader srDecrypt = new StreamReader(csDecrypt)) {
            plaintext = srDecrypt.ReadToEnd();
        }
    }
}

cryptostream设计用于执行从流到另一个流的转换,并允许转换链。例如,您可以加密数据流,然后基础64编码加密输出。

根据要写入转换输入流还是从转换输出流读取模式。

cryptostream文档具有误导性。
第一个crytostream构造函数参数被描述为:
" 进行加密转换的流"

如果构造函数第三参数值是cryptostostreammode.read,则此描述是可以的。

在" 将加密转换结果写入的流"

另外,文档并未清楚地提到,如果您使用cryptostreammode.write,则必须在完成写作后拨打CryptoStream对象上的FlushfinalBlock。

总结一下:

写入转换输入流:

cryptostream构造函数参数:

  • 参数1:目标流
  • 参数3:cryptostreammode.write

cryptostream对象使用:

  • 将数据写入加密流对象
  • 在加密流对象上调用flushfinalblock

从转换输出流读取:

cryptostream构造函数参数:

  • 参数1:源流
  • 参数3:cryptostreammode.read

cryptostream对象使用:

  • 从加密流对象读取数据,直到到达流结束

您可以在任何一个方向上使用CryptoStream进行任一操作;这是您的数据所在的位置以及您想处理的内容。

如果要处理的数据已经在流中(并且流流并处理流(,请在读取模式下使用cryptostream并将数据读取(包括使用cryptoStream.CopyTo(someOtherStream)(。如果数据在byte[]中,并且您想将其写入流,请使用cryptostream.write。

在.NET核心测试中,您可以通过两种方式找到示例。

    哎呀,这些甚至在同一文件中。这只是一个优先问题。

    cryptostream具有为加密和解密的读取/写入的灵活性。对于固定方向的情况,无论实施如何,都可以更改以沿任一方向移动。

    这是一种方法:

    https://github.com/djpai/streamconduit

    相关内容

    • 没有找到相关文章

    最新更新