【问题标题】:What do Streams do when implementing AES encryption in .NET?在 .NET 中实现 AES 加密时,Streams 会做什么?
【发布时间】:2010-09-21 20:54:15
【问题描述】:

Rijndael 加密算法在 .NET 中使用以下示例中的 3 个流实现:Rinjdael

有人可以向我解释这些流在做什么吗?如何/为什么使用它们?

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

}

【问题讨论】:

    标签: .net encryption stream aes rijndaelmanaged


    【解决方案1】:

    swEncryptStreamWriter - 它的工作是将文本转换为二进制数据

    csEncryptCryptoStream - 它的工作是将二进制数据转换为加密的二进制数据

    msEncrypt 是一个MemoryStream - 它的工作是将它提供的数据存储在内存中,以便您稍后取出

    当你把它们放在一起时,你基本上会得到一些东西,你可以在一端写纯文本,从另一端取出加密的二进制数据(暂时存储在内存中)。

    【讨论】:

    • 不应该内置的 AES 包装器在内部完成所有这些工作,并简单地返回一个字符串?还是对方法的假设太多了? (我想是的,因为他们构建它是如此通用)
    • 密码学通常应用于二进制数据流。这提供了很大的灵活性。让 AES 部分做它擅长的事情,让 StreamWriter 做 擅长的事情,等等 :)
    • (当然,您可以编写自己的便捷包装器。)
    猜你喜欢
    • 1970-01-01
    • 2011-05-12
    • 2015-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-15
    相关资源
    最近更新 更多