#region 图片加密
/// <summary>
/// 加密本地文件
/// </summary>
/// <param name="inputname">读取文件的路径</param>
/// <param name="outname">要输出的文件路径</param>
/// <param name="key">密钥</param>
/// <returns></returns>
public bool EncrptFile(string inputname, string outname, string key = "R4yqHaM%")
{
//通过des加密
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
//通过流打开文件
FileStream fs = System.IO.File.OpenRead(inputname);
//获取文件二进制字符
byte[] inputByteArray = new byte[fs.Length];
//读流文件
fs.Read(inputByteArray, 0, (int)fs.Length);
//关闭流
fs.Close();
//获得加密字符串二进制字符
byte[] keyByteArray = Encoding.Default.GetBytes(key);
//计算指定字节组指定区域哈希值
SHA1 ha = new SHA1Managed();
byte[] hb = ha.ComputeHash(keyByteArray);
//加密密钥数组
byte[] sKey = new byte[8];
//加密变量
byte[] sIV = new byte[8];
for (int i = 0; i < 8; i++)
sKey[i] = hb[i];
for (int i = 8; i < 16; i++)
sIV[i - 8] = hb[i];
//获取加密密钥
des.Key = sKey;
//设置加密初始化向量
des.IV = sIV;
MemoryStream ms = new MemoryStream();
CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write);
cs.Write(inputByteArray, 0, inputByteArray.Length);
cs.FlushFinalBlock();
fs = System.IO.File.OpenWrite(outname);
foreach (byte b in ms.ToArray())
{
fs.WriteByte(b);
}
fs.Close();
cs.Close();
ms.Close();
return true;
}
#endregion
#region 图片解密
/// <summary>
/// 解密图片 返回一个base64
/// </summary>
/// <param name="filename"></param>
/// <param name="key"></param>
/// <returns></returns>
public string ReadEnImage(string filename, string key = "R4yqHaM%")
{
//通过des解密
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
//通过流读取文件
FileStream fs = File.OpenRead(this.FilePath.Text);
//获取文件二进制字符
byte[] inputByteArray = new byte[fs.Length];
//读取流文件
fs.Read(inputByteArray, 0, (int)fs.Length);
//关闭流
fs.Close();
//密钥数组
byte[] keyByteArray = Encoding.Default.GetBytes("R4yqHaM%");
//定义哈希变量
SHA1 ha = new SHA1Managed();
//计算指定字节组指定区域哈希值
byte[] hb = ha.ComputeHash(keyByteArray);
//加密密钥数组
byte[] sKey = new byte[8];
//加密变量
byte[] sIV = new byte[8];
for (int i = 0; i < 8; i++)
sKey[i] = hb[i];
for (int i = 8; i < 16; i++)
sIV[i - 8] = hb[i];
//获取加密密钥
des.Key = sKey;
//加密变量
des.IV = sIV;
MemoryStream ms = new MemoryStream();
CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write);
cs.Write(inputByteArray, 0, inputByteArray.Length);
cs.FlushFinalBlock();
byte[] by = ms.ToArray();
string base64 = Convert.ToBase64String(by);
fs.Close();
cs.Close();
ms.Close();
return "data:image/png;base64," + base64;
}
#endregion
说明:加密代码为将图片加密后存储了一份,如果需要删除加密前的图片 自行修改代码
解密部分为 在解密后返回的不是一个图片 而是一个base64 这是我在web开发项目中遇到的问题所要求的。希望能帮助你,谢谢支持!