【转载】通过修改图片对象的文件的字节 变相\加密\\解密\图片在磁盘的存储

2024-08-28 07:58

本文主要是介绍【转载】通过修改图片对象的文件的字节 变相\加密\\解密\图片在磁盘的存储,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

实现思路比较简单:
1.对图片对象进行byteArray转化后 加一些密码字节后"加密"储存在磁盘
2.图片显示时 去掉加的字串 用原本的图片信息进行图片对象的构建和显示

WinForm下示例代码:
------------------
WinForm下通过PictureBox控件来显示:
只所以用PictureBox的Image对象
是因为有可能图像对象不是平时所见的已存在于磁盘的图片文件
还有可能是从视频采集卡等直接抓取的图像

//图像"加密"保存
private void button1_Click(object sender, EventArgs e)
{
    //把pictureBox1中的图像增加一些密码字节的文字信息后 "加密"储存在磁盘
    System.IO.MemoryStream ms = new System.IO.MemoryStream();
    byte[] byteArrayPwd = System.Text.Encoding.Default.GetBytes("http://freeliver54.cnblogs.com/");
    ms.Write(byteArrayPwd, 0, byteArrayPwd.Length);
    //   
    Image img = this.pictureBox1.Image;       
    //将图片对象存入MemoryStream
    img.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);   
    //保存"图片"文件 此时的图片用平常的图片浏览器是不能正常打开查看的
    BinaryWriter bw = new BinaryWriter(File.Open(@"F:\\images\20081014.jpg", FileMode.OpenOrCreate));
    bw.Write(ms.ToArray());
    bw.Close();
    ms.Close();
}

//"解密"图像显示 注意该解密是在内存中进行 并没有通过中间的tmp文件来搭桥
private void button2_Click(object sender, EventArgs e)
{
    FileStream fs = new FileStream(@"F:\\images\20081014.jpg", FileMode.Open, FileAccess.Read);
    byte[] byteArrayFile = new byte[fs.Length];
    fs.Read(byteArrayFile, 0, (int)fs.Length);
    fs.Close();

     byte[] byteArrayPwd = System.Text.Encoding.Default.GetBytes("http://freeliver54.cnblogs.com/");
     System.IO.MemoryStream ms = new System.IO.MemoryStream(byteArrayFile, byteArrayPwd.Length,byteArrayFile.Length-

byteArrayPwd.Length);
     //需要做相关异常处理 因为截取位置若不正确 将不能正常的构建出图像对象 会抛参数无效等异常
     try
     {
         this.pictureBox2.Image = System.Drawing.Image.FromStream(ms);
     }
     finally
     {
         ms.Close();
     }   
}

----
以上是在WinForm下的简单尝试
可能"加密"后的图片 要在Web页面的Image等控件来显示
此时就不能用直接的src指向图片文件 因为此时的该图片文件是不能正常显示的
可通过另外的页面对图片解密后再返回给控件进行显示<img src="Picture.aspx"> 

这篇关于【转载】通过修改图片对象的文件的字节 变相\加密\\解密\图片在磁盘的存储的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1114186

相关文章

Python FastAPI+Celery+RabbitMQ实现分布式图片水印处理系统

《PythonFastAPI+Celery+RabbitMQ实现分布式图片水印处理系统》这篇文章主要为大家详细介绍了PythonFastAPI如何结合Celery以及RabbitMQ实现简单的分布式... 实现思路FastAPI 服务器Celery 任务队列RabbitMQ 作为消息代理定时任务处理完整

使用C#代码在PDF文档中添加、删除和替换图片

《使用C#代码在PDF文档中添加、删除和替换图片》在当今数字化文档处理场景中,动态操作PDF文档中的图像已成为企业级应用开发的核心需求之一,本文将介绍如何在.NET平台使用C#代码在PDF文档中添加、... 目录引言用C#添加图片到PDF文档用C#删除PDF文档中的图片用C#替换PDF文档中的图片引言在当

详解C#如何提取PDF文档中的图片

《详解C#如何提取PDF文档中的图片》提取图片可以将这些图像资源进行单独保存,方便后续在不同的项目中使用,下面我们就来看看如何使用C#通过代码从PDF文档中提取图片吧... 当 PDF 文件中包含有价值的图片,如艺术画作、设计素材、报告图表等,提取图片可以将这些图像资源进行单独保存,方便后续在不同的项目中使

Java实现文件图片的预览和下载功能

《Java实现文件图片的预览和下载功能》这篇文章主要为大家详细介绍了如何使用Java实现文件图片的预览和下载功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... Java实现文件(图片)的预览和下载 @ApiOperation("访问文件") @GetMapping("

C# WinForms存储过程操作数据库的实例讲解

《C#WinForms存储过程操作数据库的实例讲解》:本文主要介绍C#WinForms存储过程操作数据库的实例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、存储过程基础二、C# 调用流程1. 数据库连接配置2. 执行存储过程(增删改)3. 查询数据三、事务处

Python实现无痛修改第三方库源码的方法详解

《Python实现无痛修改第三方库源码的方法详解》很多时候,我们下载的第三方库是不会有需求不满足的情况,但也有极少的情况,第三方库没有兼顾到需求,本文将介绍几个修改源码的操作,大家可以根据需求进行选择... 目录需求不符合模拟示例 1. 修改源文件2. 继承修改3. 猴子补丁4. 追踪局部变量需求不符合很

在java中如何将inputStream对象转换为File对象(不生成本地文件)

《在java中如何将inputStream对象转换为File对象(不生成本地文件)》:本文主要介绍在java中如何将inputStream对象转换为File对象(不生成本地文件),具有很好的参考价... 目录需求说明问题解决总结需求说明在后端中通过POI生成Excel文件流,将输出流(outputStre

Linux修改pip和conda缓存路径的几种方法

《Linux修改pip和conda缓存路径的几种方法》在Python生态中,pip和conda是两种常见的软件包管理工具,它们在安装、更新和卸载软件包时都会使用缓存来提高效率,适当地修改它们的缓存路径... 目录一、pip 和 conda 的缓存机制1. pip 的缓存机制默认缓存路径2. conda 的缓

Linux修改pip临时目录方法的详解

《Linux修改pip临时目录方法的详解》在Linux系统中,pip在安装Python包时会使用临时目录(TMPDIR),但默认的临时目录可能会受到存储空间不足或权限问题的影响,所以本文将详细介绍如何... 目录引言一、为什么要修改 pip 的临时目录?1. 解决存储空间不足的问题2. 解决权限问题3. 提

SpringBoot3使用Jasypt实现加密配置文件

《SpringBoot3使用Jasypt实现加密配置文件》这篇文章主要为大家详细介绍了SpringBoot3如何使用Jasypt实现加密配置文件功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编... 目录一. 使用步骤1. 添加依赖2.配置加密密码3. 加密敏感信息4. 将加密信息存储到配置文件中5