Ben*_*Ben 1 c# encryption cryptostream
设e ='password',我在CryptoStream中将其转换为'as9kio0736'.
设d ='as9kio0736',我将其转换为'CryptoStream中的密码'.
当我将d转换回'password'时,为什么不考虑在CryptoStream中写入?
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();
}
}
}
Run Code Online (Sandbox Code Playgroud)
您可以在任一方向上使用CryptoStream进行任一操作; 它只是您的数据所在以及您想要用它做什么.
如果要处理的数据已经在Stream中(并且您可以将流消失并处理掉),请在读取模式下使用CryptoStream并读取数据(包括使用cryptoStream.CopyTo(someOtherStream)).如果数据位于a中byte[]并且您想将其写入Stream,请使用CryptoStream.Write.
在.NET Core测试中,您可以通过两种方式查找示例.
哎呀,那些甚至在同一档案中.这只是一个偏好问题.
CryptoStream 旨在仅执行从一个流到另一个流的转换,并允许转换链接。例如,您可以加密数据流,然后 Base 64 对加密输出进行编码。
根据您是要写入转换输入流还是从转换输出流中读取来选择模式。
CryptoStream 文档具有误导性。
第一个 CrytoStream 构造函数参数被描述为:
“在其上执行加密转换的流”
如果构造函数的第三个参数值为 CryptoStreamMode.Read,则此描述是可以的。
但是如果第三个参数值是 CryptoStreamMode.Write,第一个构造函数参数描述应该是:
“加密转换结果写入的流”
此外,文档没有明确提到,如果您使用 CryptoStreamMode.Write,您必须在完成写入后对您的 CryptoStream 对象调用 FlushFinalBlock。
总结一下:
写入转换输入流:
CryptoStream 构造函数参数:
CryptoStream 对象使用:
从转换输出流中读取:
CryptoStream 构造函数参数:
CryptoStream 对象使用:
| 归档时间: |
|
| 查看次数: |
4992 次 |
| 最近记录: |