1. #region 图片加密  
  2.        /// <summary>  
  3.        /// 加密本地文件  
  4.        /// </summary>  
  5.        /// <param name="inputname">读取文件的路径</param>  
  6.        /// <param name="outname">要输出的文件路径</param>  
  7.        /// <param name="key">密钥</param>  
  8.        /// <returns></returns>  
  9.        public bool EncrptFile(string inputname, string outname, string key = "R4yqHaM%")  
  10.        {  
  11.            //通过des加密   
  12.            DESCryptoServiceProvider des = new DESCryptoServiceProvider();  
  13.            //通过流打开文件   
  14.            FileStream fs = System.IO.File.OpenRead(inputname);  
  15.            //获取文件二进制字符   
  16.            byte[] inputByteArray = new byte[fs.Length];  
  17.            //读流文件   
  18.            fs.Read(inputByteArray, 0, (int)fs.Length);  
  19.            //关闭流   
  20.            fs.Close();  
  21.            //获得加密字符串二进制字符   
  22.            byte[] keyByteArray = Encoding.Default.GetBytes(key);  
  23.            //计算指定字节组指定区域哈希值   
  24.            SHA1 ha = new SHA1Managed();  
  25.            byte[] hb = ha.ComputeHash(keyByteArray);  
  26.            //加密密钥数组   
  27.            byte[] sKey = new byte[8];  
  28.            //加密变量   
  29.            byte[] sIV = new byte[8];  
  30.            for (int i = 0; i 8; i++)  
  31.                sKey[i] = hb[i];  
  32.            for (int i = 8; i 16; i++)  
  33.                sIV[i - 8] = hb[i];  
  34.            //获取加密密钥   
  35.            des.Key = sKey;  
  36.            //设置加密初始化向量   
  37.            des.IV = sIV;  
  38.            MemoryStream ms = new MemoryStream();  
  39.            CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write);  
  40.            cs.Write(inputByteArray, 0, inputByteArray.Length);  
  41.            cs.FlushFinalBlock();  
  42.            fs = System.IO.File.OpenWrite(outname);  
  43.            foreach (byte b in ms.ToArray())  
  44.            {  
  45.                fs.WriteByte(b);  
  46.            }  
  47.            fs.Close();  
  48.            cs.Close();  
  49.            ms.Close();  
  50.            return true;  
  51.        }  
  52.   
  53.   
  54.        #endregion  
  55.   
  56.        #region 图片解密  
  57.        /// <summary>  
  58.        /// 解密图片 返回一个base64  
  59.        /// </summary>  
  60.        /// <param name="filename"></param>  
  61.        /// <param name="key"></param>  
  62.        /// <returns></returns>  
  63.        public string ReadEnImage(string filename, string key = "R4yqHaM%")  
  64.        {  
  65.            //通过des解密  
  66.            DESCryptoServiceProvider des = new DESCryptoServiceProvider();  
  67.   
  68.            //通过流读取文件  
  69.            FileStream fs = File.OpenRead(this.FilePath.Text);  
  70.            //获取文件二进制字符  
  71.            byte[] inputByteArray = new byte[fs.Length];  
  72.            //读取流文件  
  73.            fs.Read(inputByteArray, 0, (int)fs.Length);  
  74.            //关闭流  
  75.            fs.Close();  
  76.            //密钥数组  
  77.            byte[] keyByteArray = Encoding.Default.GetBytes("R4yqHaM%");  
  78.            //定义哈希变量  
  79.            SHA1 ha = new SHA1Managed();  
  80.            //计算指定字节组指定区域哈希值  
  81.            byte[] hb = ha.ComputeHash(keyByteArray);  
  82.            //加密密钥数组  
  83.            byte[] sKey = new byte[8];  
  84.            //加密变量  
  85.            byte[] sIV = new byte[8];  
  86.            for (int i = 0; i 8; i++)  
  87.                sKey[i] = hb[i];  
  88.            for (int i = 8; i 16; i++)  
  89.                sIV[i - 8] = hb[i];  
  90.            //获取加密密钥  
  91.            des.Key = sKey;  
  92.            //加密变量  
  93.            des.IV = sIV;  
  94.            MemoryStream ms = new MemoryStream();  
  95.            CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write);  
  96.            cs.Write(inputByteArray, 0, inputByteArray.Length);  
  97.            cs.FlushFinalBlock();  
  98.            byte[] by = ms.ToArray();  
  99.            string base64 = Convert.ToBase64String(by);  
  100.            fs.Close();  
  101.            cs.Close();  
  102.            ms.Close();  
  103.            return "data:image/png;base64," + base64;  
  104.   
  105.        }  
  106.   
  107.        #endregion  

说明:加密代码为将图片加密后存储了一份,如果需要删除加密前的图片  自行修改代码

解密部分为  在解密后返回的不是一个图片  而是一个base64   这是我在web开发项目中遇到的问题所要求的。希望能帮助你,谢谢支持!

posted on 2018-05-07 14:00  ChnHonKer-小河  阅读(252)  评论(0编辑  收藏  举报