c# 图片加密解密的实例代码

时间:2023-08-20 21:21:01 


using System;
using System.Collections.Generic;
using System.Text;
using System.Security.Cryptography;
using System.IO;

namespace Net.Template.Common
{
/// <summary>
/// 对图片的加密和解密
/// </summary>
public class DEncrypt4ImageHelper
{
public DEncrypt4ImageHelper() { }

#region 加密方法 图片加密
/// <summary>
/// 图片加密
/// </summary>
/// <param name="filePath">源文件</param>
/// <param name="savePath">保存为文件名称</param>
/// <param name="keyStr">密钥</param>
public static void EncryptFile(string filePath, string savePath, string keyStr)
{
//通过des加密
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
//通过流打开文件
FileStream fs = File.OpenRead(filePath);
//获取文件二进制字符
byte[] inputByteArray = new byte[fs.Length];
//读流文件
fs.Read(inputByteArray, 0, (int)fs.Length);
//关闭流
fs.Close();
//获得加密字符串二进制字符
byte[] keyByteArray = Encoding.Default.GetBytes(keyStr);

//计算指定字节组指定区域哈希值
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 = File.OpenWrite(savePath);

foreach (byte b in ms.ToArray())
{
fs.WriteByte(b);

}

fs.Close();
cs.Close();
ms.Close();

}
#endregion

#region 解密方法 图片解密
/// <summary>
/// 图片解密
/// </summary>
/// <param name="filePath">源文件</param>
/// <param name="savePath">保存文件</param>
/// <param name="keyStr">密钥</param>
public static void DecryptFile(string filePath, string savePath, string keyStr)
{
//通过des解密
DESCryptoServiceProvider des = new DESCryptoServiceProvider();

//通过流读取文件
FileStream fs = File.OpenRead(filePath);
//获取文件二进制字符
byte[] inputByteArray = new byte[fs.Length];
//读取流文件
fs.Read(inputByteArray, 0, (int)fs.Length);
//关闭流
fs.Close();
//密钥数组
byte[] keyByteArray = Encoding.Default.GetBytes(keyStr);
//定义哈希变量
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();
fs = File.OpenWrite(savePath);
foreach (byte b in ms.ToArray())
{
fs.WriteByte(b);
}
fs.Close();
cs.Close();
ms.Close();

}
#endregion

}
}


标签:图片,加密,解密
0
投稿

猜你喜欢

  • SpringBoot Security前后端分离登录验证的实现

    2023-03-09 10:30:07
  • Android仿优酷圆形菜单学习笔记分享

    2023-07-31 06:02:31
  • Java单例模式利用HashMap实现缓存数据

    2021-12-15 20:21:42
  • c# winform时钟的实现代码

    2023-04-05 07:40:53
  • C#中值类型和引用类型的区别深度分析

    2022-07-21 21:29:26
  • Java使用pulsar-flink-connector读取pulsar catalog元数据代码剖析

    2023-11-05 17:25:41
  • Android利用Flutter实现立体旋转效果

    2023-06-20 08:20:32
  • java 实现迷宫回溯算法示例详解

    2023-12-14 23:52:26
  • C#获取Word文档中所有表格的实现代码分享

    2023-05-12 10:01:46
  • 使用Android造了个滚轮控件轮子示例

    2023-04-29 07:09:17
  • 使用C#发送Http请求实现模拟登陆实例

    2023-06-22 22:25:07
  • Android如何使用Bmob后端云实现失物招领功能

    2023-10-15 07:28:05
  • 面试中遇到的java逃逸分析问题

    2021-12-08 11:58:28
  • Android实现自定义的卫星式菜单(弧形菜单)详解

    2023-03-03 14:16:51
  • C#开发中的垃圾回收机制简析

    2022-08-06 14:10:56
  • C#多线程中的异常处理操作示例

    2023-07-16 06:10:10
  • C# 利用代理爬虫网页的实现方法

    2023-02-26 18:51:43
  • Java线程公平锁和非公平锁的差异讲解

    2022-06-26 09:59:09
  • C#中Winform窗体Form的关闭按钮变灰色的方法

    2023-06-06 09:11:34
  • C#中读写INI配置文件的方法

    2021-10-29 19:57:37
  • asp之家 软件编程 m.aspxhome.com