• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
一个具有上进心的码农
因为一篇文章中有很多是从很多篇文章中摘取的,请恕我没有一一说明摘取出处,如果没有说明,则该文章默认是摘取,如有侵犯您的权益,请与我联系,将会马上删除。
博客园    首页    新随笔    联系   管理    订阅  订阅

加密文件方法

#region AES加密
        private byte[] AESEncrypt(byte[] data, string key)
        {
            MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
            byte[] buffer = md5.ComputeHash(Encoding.Default.GetBytes(key));
            byte[] bKey = GetKey(buffer);
            byte[] bVector = md5.ComputeHash(Encoding.Default.GetBytes("Wen"));
            byte[] Cryptograph = null;
            Rijndael Aes = Rijndael.Create();
            try
            {
                using (MemoryStream Memory = new MemoryStream())
                {
                    using (CryptoStream Encryptor = new CryptoStream(Memory, Aes.CreateEncryptor(bKey, bVector), CryptoStreamMode.Write))
                    {
                        Encryptor.Write(data, 0, data.Length);
                        Encryptor.FlushFinalBlock();
                        Cryptograph = Memory.ToArray();
                    }
                }
            }
            catch (Exception e)
            {
                this.msg = e.Message;
                Cryptograph = null;
            }
            return Cryptograph;
        }
        #endregion

        #region AES解密
        public byte[] AESDecrypt(byte[] data, string key)
        {
            MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
            byte[] buffer = md5.ComputeHash(Encoding.Default.GetBytes(key));
            byte[] bKey = GetKey(buffer);
            byte[] bVector = md5.ComputeHash(Encoding.Default.GetBytes("Wen"));
            byte[] original = null;
            Rijndael Aes = Rijndael.Create();
            try
            {
                using (MemoryStream Memory = new MemoryStream(data))
                {
                    using (CryptoStream Decryptor = new CryptoStream(Memory, Aes.CreateDecryptor(bKey, bVector), CryptoStreamMode.Read))
                    {
                        using (MemoryStream originalMemory = new MemoryStream())
                        {
                            byte[] Buffer = new byte[1024];
                            int readBytes = 0;
                            while ((readBytes = Decryptor.Read(Buffer, 0, Buffer.Length)) > 0)
                            {
                                originalMemory.Write(Buffer, 0, readBytes);
                            }
                            original = originalMemory.ToArray();
                        }
                    }
                }
            }
            catch (Exception e)
            {
                msg = e.Message;
                original = null;
            }
            return original;
        }
        #endregion

        #region 将byte数组从正序至反序添加到key
        private byte[] GetKey(byte[] buffer)
        {
            byte[] key = new byte[buffer.Length * 2];
            for (int i = 0; i < key.Length; i++)
            {
                if (i >= buffer.Length)
                {
                    key[i] = buffer[buffer.Length - (i / buffer.Length + i % buffer.Length)];
                }
                else
                {
                    key[i] = buffer[i];
                }
            }
            return key;
        }
        #endregion

        #region 用二进制方式读取文件
        private byte[] ReadFileByByte(string fileName)
        {
            byte[] data;
            try
            {
                using (FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.None))
                {
                    data = new byte[fs.Length];
                    int offset = 0;
                    int remaining = data.Length;
                    while (remaining > 0)
                    {
                        int read = fs.Read(data, offset, remaining);
                        if (read <= 0) throw new EndOfStreamException("File read failure!");
                        remaining -= read;
                        offset += read;
                    }
                }
            }
            catch (Exception e)
            {
                data = null;
                this.msg = e.Message;
            }
            return data;
        }
        #endregion

        #region 以二进制形式将数据写入文件
        private bool WriteFileByByte(string fileName, byte[] data)
        {
            try
            {
                using (FileStream fs = new FileStream(fileName, FileMode.Create, FileAccess.Write, FileShare.None))
                {
                    fs.Write(data, 0, data.Length);
                    return true;
                }
            }
            catch (Exception e)
            {
                this.msg = e.Message;
                return false;
            }
        }
        #endregion
posted @ 2010-03-13 15:12  不若相忘于江湖  阅读(252)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3