MemoryStream ms = new MemoryStream();
            CryptoStream cs = new CryptoStream(ms, _descsp.CreateDecryptor(), CryptoStreamMode.Write);
            cs.Write(bysEncrypt, 0, bysEncrypt.Length);
            cs.FlushFinalBlock();请问这里用的FlushFinalBlock 和 Flush 方法的区别是什么?
是否是执行了FlushFinalBlock()才开始使用加密流对象中的函数将需要加密的数据连接到内存流中进行加密,最终完成了再清空加密过程中使用的缓存和资源(这些都是我的猜测),还是使用Write的方法后就开始加密过程了 ,我在MSDN里查了下没太明白,,哪位高手能详细讲解下CryptoStream加密流配合MemoryStream的详细加密过程呢?CryptoStream.Write 方法 MSDN里的解释是 将一个字节序列写入当前 CryptoStream,并将流中的当前位置提升写入的字节数。    这里的“并将流中的当前位置提升写入的字节数”啥意思呢?忘哪位高手详细解答一下

解决方案 »

  1.   

    FlushFinalBlock只可以调用一次,第二次就抛出exception
      

  2.   

     MemoryStream memoryStream = new MemoryStream();
       //使用传递的私钥和IV创建加密流。
       CryptoStream cryptoStream = new CryptoStream(memoryStream,
       new TripleDESCryptoServiceProvider().CreateEncryptor(Key, IV),
       CryptoStreamMode.Write);
      //将传递的字符串转换为字节数组。
        byte[] toEncrypt = Encoding.Unicode.GetBytes(str);
      //将字节数组写入加密流,并清除缓冲区
       cryptoStream.Write(toEncrypt, 0, toEncrypt.Length);
       cryptoStream.FlushFinalBlock();
              
    Flush  清除该流的所有缓冲区,使得所有缓冲的数据都被写入到基础设备 
    FlushFinalBlock  用缓冲区的当前状态更新基础数据源或储存库,随后清除缓冲区。
      

  3.   

    Flush  清除该流的所有缓冲区,使得所有缓冲的数据都被写入到基础设备 
    FlushFinalBlock  用缓冲区的当前状态更新基础数据源或储存库,随后清除缓冲区。
    这是MSDN的解释,这里的FLUSH  是直接写入到MemoryStream中么,,,,FlushFinalBlock  “用缓冲区的当前状态更新基础数据源或储存库,随后清除缓冲区。”这里的更新基础数据源或储存库是啥意思呢
      

  4.   

    CryptoStream.Write 方法 MSDN里的解释是 将一个字节序列写入当前 CryptoStream,并将流中的当前位置提升写入的字节数。    这里的“并将流中的当前位置提升写入的字节数”啥意思呢?