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

yizhihongxing

c# 图片加密解密是一种通过对图片进行加密操作来保障图片内容安全的方法。下面我们将提供一份完整的攻略,介绍如何使用c#实现图片加密解密。

准备工作

在开始之前,我们需要先下载并安装c#运行环境,常用的c#开发环境有Visual Studio和Visual Studio Code。本攻略将使用Visual Studio 2019作为开发环境。

实现过程

图片加解密的实现中,主要涉及到以下步骤:

1. 加载图片

首先,我们需要将要加密的图片文件加载进来。可以使用Image.FromFile方法来实现这一步骤。示例代码如下:

Image originalImage = Image.FromFile("originalImage.bmp");

2. 将图片转换成二进制流

接下来,我们需要将图片文件转换为二进制流以便进一步的加密处理。可以使用MemoryStreamBinaryWriter来将图片文件转换为二进制流。示例代码如下:

MemoryStream ms = new MemoryStream();
BinaryWriter bw = new BinaryWriter(ms);
originalImage.Save(ms, ImageFormat.Bmp);
byte[] imageData = ms.ToArray();

3. 加密二进制流

在将图片文件转换成二进制流之后,我们可以通过对二进制流进行加密来保障图片数据的安全。常用的加密算法有DES、AES等。具体示例代码如下:

byte[] key = Encoding.UTF8.GetBytes("myKey");
byte[] iv = Encoding.UTF8.GetBytes("myIV");
DESCryptoServiceProvider crypt = new DESCryptoServiceProvider();
crypt.Mode = CipherMode.CBC;
crypt.Key = key;
crypt.IV = iv;
MemoryStream encStream = new MemoryStream();
CryptoStream cs = new CryptoStream(encStream, crypt.CreateEncryptor(), CryptoStreamMode.Write);
cs.Write(imageData, 0, imageData.Length);
cs.FlushFinalBlock();
byte[] encryptedData = encStream.ToArray();
cs.Close();
encStream.Close();

4. 将加密后的二进制流转换回图片

加密二进制流之后,我们需要将其转换回可供展示的图片格式。可以使用MemoryStreamBinaryWriterImage.FromStream等方法将加密后的二进制流转换成图片文件。具体示例代码如下:

MemoryStream decStream = new MemoryStream(encryptedData);
DESCryptoServiceProvider crypt2 = new DESCryptoServiceProvider();
crypt2.Mode = CipherMode.CBC;
crypt2.Key = key;
crypt2.IV = iv;
BinaryReader br = new BinaryReader(decStream);
byte[] decryptedData = crypt2.CreateDecryptor().TransformFinalBlock(encryptedData, 0, encryptedData.Length);
decStream.Read(decryptedData, 0, decryptedData.Length);
decStream.Seek(0, SeekOrigin.Begin);
Image decryptedImage = Image.FromStream(decStream);

示例说明

下面我们将使用两个示例来说明c#图片加密解密的实现方法。

示例1

我们有一张名称为originalImage.bmp的图片文件,我们需要将其加密并保存为名称为encryptedImage.bmp的图片文件。

示例代码如下:

using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Security.Cryptography;
using System.Text;

namespace ImageEncryptor
{
    class Program
    {
        static void Main(string[] args)
        {
            // load original image
            Image originalImage = Image.FromFile("originalImage.bmp");

            // convert image to byte array
            MemoryStream ms = new MemoryStream();
            BinaryWriter bw = new BinaryWriter(ms);
            originalImage.Save(ms, ImageFormat.Bmp);
            byte[] imageData = ms.ToArray();
            bw.Close();
            ms.Close();

            // encrypt image data
            byte[] key = Encoding.UTF8.GetBytes("myKey");
            byte[] iv = Encoding.UTF8.GetBytes("myIV");
            DESCryptoServiceProvider crypt = new DESCryptoServiceProvider();
            crypt.Mode = CipherMode.CBC;
            crypt.Key = key;
            crypt.IV = iv;
            MemoryStream encStream = new MemoryStream();
            CryptoStream cs = new CryptoStream(encStream, crypt.CreateEncryptor(), CryptoStreamMode.Write);
            cs.Write(imageData, 0, imageData.Length);
            cs.FlushFinalBlock();
            byte[] encryptedData = encStream.ToArray();
            cs.Close();
            encStream.Close();

            // convert encrypted data to image
            MemoryStream decStream = new MemoryStream(encryptedData);
            BinaryReader br = new BinaryReader(decStream);
            byte[] decryptedData = crypt.CreateDecryptor().TransformFinalBlock(encryptedData, 0, encryptedData.Length);

            // create new image from decrypted data
            decStream.Seek(0, SeekOrigin.Begin);
            Image decryptedImage = Image.FromStream(decStream);
            decryptedImage.Save("encryptedImage.bmp", ImageFormat.Bmp);
        }
    }
}

示例2

我们需要从名称为encryptedImage.bmp的图片文件中解密出原始图片并展示出来。

示例代码如下:

using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Security.Cryptography;
using System.Text;
using System.Windows.Forms;

namespace ImageEncryptor
{
    class Program
    {
        static void Main(string[] args)
        {
            // load and decrypt image
            byte[] imageData = File.ReadAllBytes("encryptedImage.bmp");
            byte[] key = Encoding.UTF8.GetBytes("myKey");
            byte[] iv = Encoding.UTF8.GetBytes("myIV");
            DESCryptoServiceProvider crypt = new DESCryptoServiceProvider();
            crypt.Mode = CipherMode.CBC;
            crypt.Key = key;
            crypt.IV = iv;
            MemoryStream encStream = new MemoryStream(imageData);
            CryptoStream cs = new CryptoStream(encStream, crypt.CreateDecryptor(), CryptoStreamMode.Read);
            MemoryStream decStream = new MemoryStream();
            int data;
            while ((data = cs.ReadByte()) != -1)
            {
                decStream.WriteByte((byte)data);
            }
            byte[] decryptedData = decStream.ToArray();
            cs.Close();
            encStream.Close();
            decStream.Close();

            // create and show image
            Image image = Image.FromStream(new MemoryStream(decryptedData));
            PictureBox pictureBox = new PictureBox();
            pictureBox.SizeMode = PictureBoxSizeMode.AutoSize;
            pictureBox.Image = image;
            Form form = new Form();
            form.Controls.Add(pictureBox);
            form.Show();
        }
    }
}

运行以上两个示例代码之后,我们即可成功加密和解密一张图片文件。

结束语

通过本攻略的介绍,我们学习了使用c#实现图片加密解密的方法,同时提供了两个实际应用的代码示例,希望对大家有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:c# 图片加密解密的实例代码 - Python技术站

(0)
上一篇 2023年6月8日
下一篇 2023年6月8日

相关文章

  • 分享WCF文件传输实现方法—WCFFileTransfer

    WCF(Windows Communication Foundation)是一种用于构建分布式应用程序的框架。WCF可以用于实现各种功能,包括文件传输。本文将介绍如何使用WCF实现文件传输,并分享一个名为WCFFileTransfer的示例项目。 WCFFileTransfer项目介绍 WCFFileTransfer是一个使用WCF实现文件传输的示例项目。该…

    C# 2023年5月15日
    00
  • div弹出层的ajax登录(Jquery版+c#)

    下面我将详细讲解“div弹出层的ajax登录(Jquery版+c#)”的攻略。 1. 简介 该攻略是基于Jquery和c#的div弹出层的ajax登录的教程。通过该攻略,用户可以学习到如何利用Jquery开发div弹出层,以及如何通过ajax技术,实现无刷新的登录功能。 2. 准备工作 在开始该攻略之前,我们需要先准备好相关的工具和环境: 编辑器:Visua…

    C# 2023年5月31日
    00
  • 基于C#实现简易的键盘记录器

    基于C#实现简易的键盘记录器 简介 键盘记录器是一种记录键盘输入器的程序,它可以记录用户键盘操作的所有内容。本攻略将基于C#实现一款简易的键盘记录器。 构建步骤 1. 获取输入 键盘记录器需要获取用户键盘输入,我们可以使用System.Windows.Forms中的Keyboard来获取。 private void RecordKeystrokes() { …

    C# 2023年6月6日
    00
  • C# Linq的Except()方法 – 返回在一个序列中但不在另一个序列中的元素

    Linq是C#语言的一个强大的功能,可以使得数据的查询和操作变得更加方便和高效。Except()方法也是Linq功能中的一个非常重要的方法,用于提取序列中存在于另一个序列的元素之外的所有元素。下面详细介绍一下Except()方法的使用。 Except()方法的语法 Except()方法具有以下语法: public static IEnumerable<…

    C# 2023年4月19日
    00
  • JQuyer $.post 与 $.ajax 访问WCF ajax service 时的问题需要注意的地方

    在使用jQuery的$.post和$.ajax方法访问WCF ajax服务时,需要注意以下几个问题: 跨域访问问题 由于浏览器的同源策略,如果WCF ajax服务和jQuery代码不在同一个域中,就会出现跨域访问问题。为了解决这个问题,可以在WCF ajax服务中添加CORS(跨域资源共享)支持,或者使用JSONP(JSON with Padding)技术。…

    C# 2023年5月15日
    00
  • Winform学生信息管理系统登陆窗体设计(1)

    下面是Winform学生信息管理系统登陆窗体设计的完整攻略。 一、设计思路 设计一个Winform学生信息管理系统登陆窗体需要以下几步: 新建一个Winform项目,添加登陆窗体。 设计登陆窗体的布局,包括添加组件,设置组件属性等。 为登陆窗体的组件添加事件处理程序,比如点击按钮触发登陆操作。 在事件处理程序中,编写验证登陆信息的代码,并执行相应的操作。 二…

    C# 2023年6月3日
    00
  • C# 判断字符为空的6种方法的效率实测对比

    我来详细讲解“C# 判断字符为空的6种方法的效率实测对比”的完整攻略。 1. 引言 在C#编程中,判断字符是否为空是一项非常基础的操作。为了提高代码效率,我们需要选择最合适的方法。本文从六种不同的判断字符为空的方式进行效率实测,以便找到一种最优解。 2. 方法介绍 以下是六种不同的判断字符为空的方式: 2.1 判断字符串是否为空或null if (strin…

    C# 2023年6月1日
    00
  • C#如何取硬件标志

    要获取硬件标志,可以使用ManagementClass类和ManagementObjectSearcher类来访问Windows的WMI(Windows Management Instrumentation)服务。WMI是一个Windows管理架构,它允许开发人员查询和修改计算机系统中的配置信息。 以下是获取硬件标志的完整攻略: 1. 引入命名空间 首先需要…

    C# 2023年6月6日
    00
合作推广
合作推广
分享本页
返回顶部