c# 图片加密解密是一种通过对图片进行加密操作来保障图片内容安全的方法。下面我们将提供一份完整的攻略,介绍如何使用c#实现图片加密解密。
准备工作
在开始之前,我们需要先下载并安装c#运行环境,常用的c#开发环境有Visual Studio和Visual Studio Code。本攻略将使用Visual Studio 2019作为开发环境。
实现过程
图片加解密的实现中,主要涉及到以下步骤:
1. 加载图片
首先,我们需要将要加密的图片文件加载进来。可以使用Image.FromFile
方法来实现这一步骤。示例代码如下:
Image originalImage = Image.FromFile("originalImage.bmp");
2. 将图片转换成二进制流
接下来,我们需要将图片文件转换为二进制流以便进一步的加密处理。可以使用MemoryStream
和BinaryWriter
来将图片文件转换为二进制流。示例代码如下:
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. 将加密后的二进制流转换回图片
加密二进制流之后,我们需要将其转换回可供展示的图片格式。可以使用MemoryStream
、BinaryWriter
和Image.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技术站