2008-11-11 5 views
1

Алгоритм шифрования Rijndael реализован в .NET с использованием 3 потоков в следующем примере: Rinjdael.Что делают Streams при внедрении AES в .NET?

Может кто-нибудь объяснить мне, что делают эти потоки? Как/Почему они используются?

// 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); 

} 

ответ

3

swEncrypt является StreamWriter - его работа состоит в том, чтобы преобразовать текст в двоичные данные

csEncrypt является CryptoStream - его работа состоит в том, чтобы преобразовать двоичные данные в зашифрованные двоичные данные

msEncrypt является MemoryStream - его задача - хранить данные, данные в памяти, поэтому вы можете получить их позже.

Когда вы их объединяете, вы в основном получаете som что вы можете написать простой текст в одном конце и получить зашифрованные двоичные данные (временно сохраненные в памяти) другого конца.

+0

не должен ли встроенная оболочка AES делать все это внутри и просто возвращать строку? Или это слишком много для метода? (Я так думаю, так как они построили его таким общим) –

+0

Криптография обычно применяется к потокам двоичных данных. Это дает большую гибкость. Пусть часть AES сделает то, что хорошо, и пусть StreamWriter делает то, что * * * хорошо, и т. Д. :) –

+0

(Но вы можете написать свою собственную упаковку удобства, конечно.) –