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

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日

相关文章

  • C# log4net 日志输出的实现示例

    下面我将详细讲解C#log4net日志输出的实现示例,包含如何配置log4net和示例的代码实现。 配置log4net 首先,我们需要在项目中添加log4net的nuget包,并在项目的AssemblyInfo.cs文件中添加以下代码: [assembly: log4net.Config.XmlConfigurator(ConfigFile = "…

    C# 2023年5月15日
    00
  • .net 随机生成汉字

    下面是.NET随机生成汉字的完整攻略: 1.使用C#生成汉字 我们可以使用以下代码片段中的方法在C#中生成随机汉字: private static readonly Random Random = new Random(); public static string GenerateChineseCharacter(int length) { string[…

    C# 2023年5月31日
    00
  • C# winfrom 模拟ftp文件管理实现代码

    为实现C# WinForm中FTP文件管理,需要通过FTP协议连接到FTP服务器,并进行文件的上传、下载、删除和重命名等操作。这里提供一份完整攻略,包括相关API的使用和示例代码的实现。 连接FTP服务器 C# WinForm最常使用的.NET类库是System.Net,其中有一个FtpWebRequest类可以用于创建FTP请求,实现对FTP服务器的连接。…

    C# 2023年6月1日
    00
  • ASP.NET MVC实现登录后跳转到原界面

    ASP.NET MVC实现登录后跳转到原界面的完整攻略如下: 首先,在需要登录才能访问的控制器或方法上添加[Authorize]特性。例如: [Authorize] public class HomeController : Controller { public ActionResult Index() { return View(); } } 这样,当用…

    C# 2023年5月12日
    00
  • C#中enum和string的相互转换

    让我们来详细讲解 C# 中 enum 和 string 的相互转换的完整攻略。 什么是 enum 和 string? 首先,我们需要了解什么是枚举(enum)和字符串(string)。枚举(enum)是 C# 中一种特殊的数据类型,它用于定义一组有限的命名常量。字符串(string)是 C# 中常用的数据类型,它表示一组字符序列。 enum 转换为 stri…

    C# 2023年5月31日
    00
  • 解决.Net Core项目发布在IIS上访问404的问题

    解决.Net Core项目发布在IIS上访问404的问题 在将ASP.NET Core应用程序发布到IIS上时,可能会遇到404错误。这通常是由于IIS未正确配置或ASP.NET Core应用程序未正确配置所致。在本攻略中,我们将详细讲解如何解决ASP.NET Core应用程序发布在IIS上访问404的问题,并提供两个示例说明。 步骤一:安装.NET Cor…

    C# 2023年5月17日
    00
  • abp(net core)+easyui+efcore实现仓储管理系统——供应商管理升级之下(六十四)

    abp(net core)+easyui+efcore实现仓储管理系统目录 abp(net core)+easyui+efcore实现仓储管理系统——ABP总体介绍(一) abp(net core)+easyui+efcore实现仓储管理系统——解决方案介绍(二) abp(net core)+easyui+efcore实现仓储管理系统——领域层创建实体(三)…

    C# 2023年5月7日
    00
  • C#实现文件上传下载Excel文档示例代码

    下面我将详细讲解C#实现文件上传下载Excel文档的示例代码攻略。 1. 实现文件上传 1.1 编写HTML表单 首先,我们需要在前端编写一个HTML表单,让用户选择要上传的文件和提交表单。 <form action="UploadFileHandler.ashx" enctype="multipart/form-data…

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