2017-05-05 56 views
0

讓e ='密碼',然後我將它轉換爲CryptoStream中的'as9kio0736'。CryptoStream:爲什麼CryptoStreamMode.Write加密和CryptoStreamMode.Read解密?

讓d ='as9kio0736'並將其轉換爲CryptoStream中的密碼。

當我將d變回'密碼'時,爲什麼不考慮在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(); 
     } 
    } 
} 
+0

因爲你寫入,分別從底層流中讀取? – CodeCaster

+0

你寫入密碼流,它加密並將結果寫入MemoryStream(在你的例子中)。您從密碼流中讀取 - 它從MemoryStream中讀取,解密並將結果返回給您。 – Evk

回答

2

您可以在任一方向上使用CryptoStream進行任一操作;它只是你的數據在哪裏,你想要做什麼。

如果要處理的數據已經在Stream中(並且您可以正常使用流進行排空和處理),請在讀取模式下使用CryptoStream並讀取數據(包括使用cryptoStream.CopyTo(someOtherStream))。如果數據在byte[]中並且您想將其寫入Stream,請使用CryptoStream.Write。

在.NET Core測試中,您可以通過兩種方式找到示例。

哎呀,那些即使在相同的文件。這只是一個偏好問題。