天天看点

.NET 图片解密为BASE64

  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.            cs.Close();  
  48.            ms.Close();  
  49.            return true;  
  50.        }  
  51.        #endregion  
  52.        #region 图片解密  
  53.        /// 解密图片 返回一个base64  
  54.        /// <param name="filename"></param>  
  55.        /// <param name="key"></param>  
  56.        public string ReadEnImage(string filename, string key = "R4yqHaM%")  
  57.            //通过des解密  
  58.            //通过流读取文件  
  59.            FileStream fs = File.OpenRead(this.FilePath.Text);  
  60.            //获取文件二进制字符  
  61.            //读取流文件  
  62.            //关闭流  
  63.            //密钥数组  
  64.            byte[] keyByteArray = Encoding.Default.GetBytes("R4yqHaM%");  
  65.            //定义哈希变量  
  66.            //计算指定字节组指定区域哈希值  
  67.            //加密密钥数组  
  68.            //加密变量  
  69.            //获取加密密钥  
  70.            CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write);  
  71.            byte[] by = ms.ToArray();  
  72.            string base64 = Convert.ToBase64String(by);  
  73.            return "data:image/png;base64," + base64;  

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

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