让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