Алгоритм шифрования Rijndael реализован в .NET с использованием 3 потоков в следующем примере: Риндждаэль.
Может кто-нибудь объяснить мне, что делают эти потоки? Как / почему они используются?
// Declare the streams used
// to encrypt to an in memory
// array of bytes.
MemoryStream msEncrypt = null;
CryptoStream csEncrypt = null;
StreamWriter swEncrypt = null;
// Declare the RijndaelManaged object
// used to encrypt the data.
RijndaelManaged aesAlg = null;
try
{
// Create a RijndaelManaged object
// with the specified key and IV.
aesAlg = new RijndaelManaged();
aesAlg.Key = Key;
aesAlg.IV = IV;
// Create a encryptor to perform the stream transform.
ICryptoTransform encryptor = aesAlg.CreateEncryptor(aesAlg.Key, aesAlg.IV);
// Create the streams used for encryption.
msEncrypt = new MemoryStream();
csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write);
swEncrypt = new StreamWriter(csEncrypt);
//Write all data to the stream.
swEncrypt.Write(plainText);
}





swEncrypt - это StreamWriter - его задача - преобразовывать текст в двоичные данные.
csEncrypt - это CryptoStream, его задача - преобразовывать двоичные данные в зашифрованные двоичные данные.
msEncrypt - это MemoryStream - его работа заключается в хранении данных, которые он передает, в памяти, чтобы вы могли получить их позже.
Когда вы складываете их все вместе, вы в основном получаете что-то, где вы можете написать простой текст на одном конце и получить зашифрованные двоичные данные (временно сохранив их в памяти) на другом конце.
Криптография обычно применяется к потокам двоичных данных. Это дает большую гибкость. Пусть часть AES делает то, в чем она хороша, и пусть StreamWriter делает то, в чем хорош это и т. д. :)
(Но вы, конечно, можете написать свою собственную удобную оболочку.)
не должна ли встроенная оболочка AES делать все это внутренне и просто возвращать строку? Или это слишком много для метода? (Думаю, что так, поскольку они сделали его таким универсальным)