C#论坛-玄机论坛-C#论坛-玄机宝盒-玄机类库-C#

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 495|回复: 0

[求助中] 关于C#解密返回流的问题

[复制链接]
  • TA的每日心情
    擦汗
    2017-12-13 08:06
  • 签到天数: 3 天

    [LV.2]【绿林好汉】

    1623863129 发表于 2017-12-11 22:44:48 | 显示全部楼层 |阅读模式
    1紫晶
    我用的是https://www.cnblogs.com/lged/p/5713560.html这篇博客代码,主要是解密这个我想返回stream不知道怎么搞,下面是我改的,错了,请大神,改的地方加了序号
    public static Stream DecryptFile(string inFile, string password)        
    {            
    // 创建打开文件流           
    using (FileStream fin = File.OpenRead(inFile))            
    {               
    Stream fout=null;//需要返回的流 (1)加了一个流               
    int size = (int)fin.Length;               
    byte[] bytes = new byte[BUFFER_SIZE];               
    int read = -1;               
    int value = 0;               
    int outValue = 0;               
    byte[] IV = new byte[16];               
    fin.Read(IV, 0, 16);               
    byte[] salt = new byte[16];               
    fin.Read(salt, 0, 16);               
    SymmetricAlgorithm sma = DESFileClass.CreateRijndael(password, salt);               
    sma.IV = IV;               
    value = 32;               
    long lSize = -1;               
    // 创建散列对象, 校验文件               
    HashAlgorithm hasher = SHA256.Create();               
    using (CryptoStream cin = new CryptoStream(fin, sma.CreateDecryptor(), CryptoStreamMode.Read),                  
    chash = new CryptoStream(Stream.Null, hasher, CryptoStreamMode.Write))               
    {                  
    // 读取文件长度                  
    BinaryReader br = new BinaryReader(cin);                  
    lSize = br.ReadInt64();                  
    ulong tag = br.ReadUInt64();                  
    if (FC_TAG != tag)                       
    throw new CryptoHelpException("文件被破坏");                    
    long numReads = lSize / BUFFER_SIZE;                    
    long slack = (long)lSize % BUFFER_SIZE;                    
    for (int i = 0; i < numReads; ++i)                    
    {                       
    read = cin.Read(bytes, 0, bytes.Length);                        
    fout.Write(bytes, 0, read);//我换成fout.Read(bytes,0,read)和fout.Read(bytes,outValue,read)都不行     (2)改了无效果,不会啊                  
    chash.Write(bytes, 0, read);                       
    value += read;                        
    outValue += read;                    
    }                  
    if (slack > 0)                  
    {                       
    read = cin.Read(bytes, 0, (int)slack);                       
    fout.Write(bytes, 0, read);//我换成fout.Read(bytes,0,read)和fout.Read(bytes,outValue,read)都不行      (3)                  
    chash.Write(bytes, 0, read);                        
    value += read;                       
    outValue += read;                  
    }                    
    chash.Flush();                  
    chash.Close();                  
    // fout.Flush();                  
    // fout.Close();                    
    return fout;                   (4)返回流,后面都不要了
    // byte[] curHash = hasher.Hash;                  
    // // 获取比较和旧的散列对象                  
    //  byte[] oldHash = new byte[hasher.HashSize / 8];                  
    // read = cin.Read(oldHash, 0, oldHash.Length);                  
    // if ((oldHash.Length != read) || (!CheckByteArrays(oldHash, curHash)))                     
    // throw new CryptoHelpException("文件被破坏");               
    }               
    //if (outValue != lSize)                 
    //  throw new CryptoHelpException("文件大小不匹配");         
      }        
    }

    玄机论坛-专业的C#交流论坛 交流QQ群: 16885911
    帖子内网盘失效后请使用下面地址

    http://bbs.msdn5.com/thread-1218-1-1.html
    如果失效请联系站长重新分享
    回复

    使用道具 举报

    *滑动验证:
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    关闭

    站长推荐上一条 /2 下一条

    QQ|Archiver|手机版|小黑屋|玄机论坛   

    GMT+8, 2018-10-16 09:57 , Processed in 0.630120 second(s), 20 queries .

    Powered by Msdn5.com

    © 2014-2015 Msdn5 Inc.

    快速回复 返回顶部 返回列表