加解密流不支持查找, cstream.Length 这一句在查找其长度,所以有错。

解决方案 »

  1.   

    加密:
    static String Encrypt(String pwd) {
    DESCryptoServiceProvider desc = new DESCryptoServiceProvider();//des进行加密
    PasswordDeriveBytes db = new PasswordDeriveBytes(pwd, null);//产生key
    byte[] key = db.GetBytes(8);
    MemoryStream ms = new MemoryStream();//存储加密后的数据
    CryptoStream cs = new CryptoStream(ms,desc.CreateEncryptor(key, key),CryptoStreamMode.Write);
    byte[] data = Encoding.Unicode.GetBytes(pwd);//取到密码的字节流
    cs.Write(data, 0, data.Length);//进行加密
    cs.FlushFinalBlock();
    byte[] res = ms.ToArray();//取加密后的数据
    return Encoding.Unicode.GetString(res);//转换到字符串返回
    }
    解密:
    static String Decrypt(String pwd, String data) {
    DESCryptoServiceProvider desc = new DESCryptoServiceProvider();
    PasswordDeriveBytes db = new PasswordDeriveBytes(pwd, null);//产生key
    byte[] key = db.GetBytes(8);
    MemoryStream ms = new MemoryStream();//存储解密后的数据
    CryptoStream cs = new CryptoStream(ms,desc.CreateDecryptor(key, key),CryptoStreamMode.Write);
    byte[] databytes = Encoding.Unicode.GetBytes(data);//取到加密后的数据的字节流
    cs.Write(databytes, 0, databytes.Length);//解密数据
    cs.FlushFinalBlock();
    byte[] res = ms.ToArray();
    return Encoding.Unicode.GetString(res);//返回解密后的数据
    }
      

  2.   

    // 反向操作--解密刚才加密的临时文件
    fsIn = File.Open(tempfile,FileMode.Open,FileAccess.Read);
    transform = symm.CreateDecryptor();
    cstream = new CryptoStream(fsIn,transform,
    CryptoStreamMode.Read);StreamReader sr = new StreamReader(cstream);
    Console.WriteLine("decrypted file text: " + sr.ReadToEnd());
    fsIn.Close();
    }
    }
    }一个片断,拷的,试试?
      

  3.   

    我说说我的思路:
    现在有一个A.gif文件,按"加密"按钮就把A.gif加密起来变成B.gif.
    按"解密"按钮就把B.gif文件解密为C.gif文件请问各位高手..在webform只怎样实现..最好有实例.....
      

  4.   

    我说说我的思路:
    现在有一个A.gif文件,按"加密"按钮就把A.gif加密起来变成B.gif.
    按"解密"按钮就把B.gif文件解密为C.gif文件
    加密:
    FileStream fsIn = File.Open(file,FileMode.Open,FileAccess.Read);
    FileStream fsOut = File.Open(tempfile, FileMode.Create,FileAccess.Write);SymmetricAlgorithm symm = new RijndaelManaged();
    ICryptoTransform transform = symm.CreateEncryptor();
    CryptoStream cstream = new CryptoStream(fsOut,transform,CryptoStreamMode.Write);BinaryReader br = new BinaryReader(fsIn);
    cstream.Write(br.ReadBytes((int)fsIn.Length),0,(int)fsIn.Length);
    cstream.FlushFinalBlock();
    cstream.Close();
    fsIn.Close();
    fsOut.Close();解密:
    fsIn = File.Open(tempfile,FileMode.Open,FileAccess.Read);
    transform = symm.CreateDecryptor();
    cstream = new CryptoStream(fsIn,transform,CryptoStreamMode.Read);
    br = new BinaryReader(fsIn);
    cstream.Read(br.ReadBytes((int)fsIn.Length),0,(int)fsIn.Length);

    FileStream fs = new FileStream(desfile,FileMode.Create,FileAccess.Write);

    fs.Write(br.ReadBytes((int)cstream.Length), 0, (int)cstream.Length);
    fs.Close();
    fsIn.Close();
    cstream.Close();以上代码加密可以.在解密时发生一个错误. 错误在 行248流不支持查找。 
    说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.NotSupportedException: 流不支持查找。源错误: 
    行 246: FileStream fs = new FileStream(desfile,FileMode.Create,FileAccess.Write);
    行 247:
    行 248: fs.Write(br.ReadBytes((int)cstream.Length), 0, (int)cstream.Length);   //错误在这一行.
    行 249: fs.Close();
    行 250: fsIn.Close();