当前位置:编程学习 > C#/ASP.NET >>

关于文件流加密,请大师们指点迷津。。

我是通过SQL2008的FILESTREAM来管理文件,以下代码写入文件是没有错的。。  如果我是在写入之前加密呢?文件格式可能是.RAR .DOC .TXT .PDF  请大师们不宁赐教!!

 protected void btnWrite_Click(object sender, EventArgs e)
    {
        string conn = ConfigurationManager.ConnectionStrings["FileStream"].ConnectionString;

        using (SqlConnection connection = new SqlConnection(conn))
        {
            connection.Open();
            SqlCommand command = new SqlCommand();
            command.Connection = connection;
            command.CommandText = "SELECT top 1 FSData.PathName(), " +
   "GET_FILESTREAM_TRANSACTION_CONTEXT() FROM FileStreamTable ";
            SqlTransaction transaction = connection.BeginTransaction(IsolationLevel.ReadCommitted);
            command.Transaction = transaction;

            using (SqlDataReader reader = command.ExecuteReader())
            {
                while (reader.Read())
                {
                    string path = reader.GetString(0);
                    object obj = reader.GetValue(1);
                    SqlFileStream stream = new SqlFileStream(path, (byte[])reader.GetValue(1), FileAccess.Write, FileOptions.SequentialScan, 0);
                    //SqlFileStream stream = new SqlFileStream(path, (byte[])reader.GetValue(1), FileAccess.Write);
                    Stream s = new FileStream(@"E:\FileStreamTest\text.txt", FileMode.Open);
                    s.CopyTo(stream);
                    stream.Close();
                    s.Close();
                                    }
            }
            transaction.Commit();
        }
    }
--------------------编程问答-------------------- 我觉得文件格式你可以在保存的时候就可以获取的到。
在写入的时候加密,然后在获取的时候在解密一下。 --------------------编程问答--------------------
public static byte[] EncryptString(byte[] plainTextArray, byte[] Key, byte[] IV)
    {
        // 建立一个MemoryStream,这里面存放加密后的数据流
        MemoryStream mStream = new MemoryStream();
        // 使用MemoryStream 和key、IV新建一个CryptoStream 对象
        CryptoStream cStream = new CryptoStream(mStream,
            new TripleDESCryptoServiceProvider().CreateEncryptor(Key, IV),
            CryptoStreamMode.Write);
        // 将加密后的字节流写入到MemoryStream
        cStream.Write(plainTextArray, 0, plainTextArray.Length);
        //把缓冲区中的最后状态更新到MemoryStream,并清除cStream的缓存区
        cStream.FlushFinalBlock();
        // 把解密后的数据流转成字节流
        byte[] ret = mStream.ToArray();
        // 关闭两个streams.
        cStream.Close();
        mStream.Close();
        return ret;
    }

我调用这个方法,会产生2个流;MemoryStream mStream ,SqlFileStream stream  。会报:无法执行该事务操作,因为有挂起请求正在此事务上运行。的错误。。 --------------------编程问答--------------------
引用 1 楼 xiaoyuan402 的回复:
我觉得文件格式你可以在保存的时候就可以获取的到。
在写入的时候加密,然后在获取的时候在解密一下。


现在文件格式不成问题。。 写入之后都是文件类型。。读取出来加上类型就可以了。。。 主要是加密这块,头疼啊。。 
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,