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

 更新时间:2013年08月29日 15:58:08   作者:  
这篇文章介绍了c# 图片加密解密的实例代码,有需要的朋友可以参考一下

复制代码 代码如下:

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

}
}

相关文章

  • unity实现简单的贪吃蛇游戏

    unity实现简单的贪吃蛇游戏

    这篇文章主要为大家详细介绍了unity实现简单的贪吃蛇游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-03-03
  • 浅析WPF中Binding的数据校验和类型转换

    浅析WPF中Binding的数据校验和类型转换

    在WPF开发中,Binding实现了数据在Source和Target之间的传递和流通,那在WPF开发中,如何实现数据的校验和类型转换呢,下面就跟随小编一起学习一下吧
    2024-03-03
  • C#设计模式之职责链模式示例详解

    C#设计模式之职责链模式示例详解

    这篇文章主要给大家介绍了关于C#设计模式之职责链模式的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • unity中实现Edge浏览器鼠标手势的功能思路详解

    unity中实现Edge浏览器鼠标手势的功能思路详解

    这篇文章主要介绍了unity中实现Edge浏览器鼠标手势的功能思路详解,实现起来其实并不复杂,涉及的技术点有pc端和移动端屏幕拖动事件,二维向量的相关运算,手势匹配算法,事件系统设计模式,需要的朋友可以参考下
    2023-12-12
  • 详解c# 线程同步

    详解c# 线程同步

    这篇文章主要介绍了c# 线程同步的相关资料,文中讲解非常细致,示例代码帮助大家更好的理解和学习c# 多线程,感兴趣的朋友可以了解下
    2020-07-07
  • C#异步调用的好处和方法分享

    C#异步调用的好处和方法分享

    我们要明确,为什么要进行异步回调?众所周知,普通方法运行,是单线程的,如果中途有大型操作(如:读取大文件,大批量操作数据库,网络传输等),都会导致方法阻塞,表现在界面上就是,程序卡或者死掉,界面元素不动了,不响应了
    2012-04-04
  • 优雅又实用的C#代码优化技巧分享

    优雅又实用的C#代码优化技巧分享

    这篇文章主要为大家整理了一些优雅又实用的C#代码优化技巧,文中的示例代码讲解详细,对我们深入了解C#有一定的帮助,需要的可以参考一下
    2023-06-06
  • C#判断一个类是否实现了某个接口3种实现方法

    C#判断一个类是否实现了某个接口3种实现方法

    这篇文章主要介绍了C#判断一个类是否实现了某个接口3种实现方法,本文直接给出实现代码,需要的朋友可以参考下
    2015-06-06
  • C#实现让窗体获得焦点的方法示例

    C#实现让窗体获得焦点的方法示例

    这篇文章主要介绍了C#实现让窗体获得焦点的方法,涉及C#窗体事件相关操作技巧,需要的朋友可以参考下
    2017-06-06
  • 如何在UpdatePanel中调用JS客户端脚本

    如何在UpdatePanel中调用JS客户端脚本

    本文将介绍如何在UpdatePanel中调用JS客户端脚本,需要了解的朋友可以参考下
    2012-12-12

最新评论