मैं MemoryStream
बना रहा हूं, इसे CryptoStream
पर लिखने के लिए पास करें। मैं CryptoStream
एन्क्रिप्ट करने के लिए चाहता हूं, और MemoryStream
मेरे लिए खोलने के लिए कुछ और पढ़ने के लिए छोड़ दें। लेकिन जैसे ही CryptoStream
का निपटारा किया जाता है, यह MemoryStream
का भी निपटान करता है।क्या क्रिप्टोस्ट्रीम आधार स्ट्रीम को छोड़ सकता है?
CryptoStream
आधार MemoryStream
किसी भी तरह से खोल सकते हैं?
using (MemoryStream scratch = new MemoryStream())
{
using (AesManaged aes = new AesManaged())
{
// <snip>
// Set some aes parameters, including Key, IV, etc.
// </snip>
ICryptoTransform encryptor = aes.CreateEncryptor();
using (CryptoStream myCryptoStream = new CryptoStream(scratch, encryptor, CryptoStreamMode.Write))
{
myCryptoStream.Write(someByteArray, 0, someByteArray.Length);
}
}
// Here, I'm still within the MemoryStream block, so I expect
// MemoryStream to still be usable.
scratch.Position = 0; // Throws ObjectDisposedException
byte[] scratchBytes = new byte[scratch.Length];
scratch.Read(scratchBytes,0,scratchBytes.Length);
return Convert.ToBase64String(scratchBytes);
}
आप पहली जगह स्ट्रीम का उपयोग क्यों कर रहे हैं? इनपुट बाइट्स पर बस 'एन्क्रिप्टर। ट्रांसफॉर्मफिनलब्लॉक' पर कॉल करें। स्ट्रीम अधिकतर वृद्धिशील एन्क्रिप्शन/डिक्रिप्शन के लिए उपयोगी होते हैं, लेकिन जब आपके पास एक ही समय में पूर्ण डेटा उपलब्ध नहीं होता है। – CodesInChaos