图片加密(一)颜色加密
图片加密(一)颜色加密
前置内容:图片的储存方式
图片是由一个个像素点组成的。对于有色图片来说,每一个像素点的颜色可以由红绿蓝三种颜色合成,也就是可能听说过的RGB。
在计算机中,用0~255来表示这三种颜色每个颜色的程度,于是每个像素点可由三个数字表示。读取图片可使用如下方法(注意,用的是python):
import cv2 # 这里使用了cv2进行图片的读取,需要下载opencv库
import random #用来获取随机数用于加密
img_cv = cv2.imread('c.jpg') # 读取图片
print(img_cv)
因此,如图一张162×157分辨率的图片可视为一个162×157×3的三维矩阵(矩阵排版奇怪,应该能看出来吧QAQ)
开始操作
知道图片的储存方式,它的一个简单的加密方式就呼之欲出了。按一定规律改变矩阵的数值就能很好地把图片变得面目全非。解密图片则只需将改变的过程进行一个逆操作就能得到原先的图片。
密钥生成
我们随机生成一个对应关系,使得0~255这些数字一一对应到相同范围内不同的数,且可逆。使用列表存储正逆对应关系。
lent1 = len(img_cv) # 高度
lent2 = len(img_cv[1]) # 宽度
lent3 = 3 # 三个表示颜色
siph = [] # 加密对应表
solv = [] # 解密对应表
for i in range(0, 256): # 预处理siph.extend([i])solv.extend([0])
random.shuffle(siph) # 打乱形成加密对应,i对应siph[i]
for i in range(0, 256):solv[siph[i]] = i # 解密对应,solv[siph[i]]对应i
遍历每一个值,使之变为对应的数,则可使图片的颜色变得诡异。下面是代码:
for i in range(lent1):for j in range(lent2):for k in range(lent3):img_cv[i][j][k] = siph[img_cv[i][j][k]]
cv2.namedWindow("a") # 此两行命名、显示加密图片
cv2.imshow("a", img_cv)
现在让我们来看一下效果图:
可以看出变化不小,但是还是能看出面大致的轮廓,而且对于纯色的部分加密后依然是纯色。这是加密的规则比较简单的缘故。大家大可设计一些复杂的加密方法来使效果更好(例如每个像素有独特的方法啥的)
解密的原理和加密相同,相当于再加密又加密回去了,这里直接上代码:
for i in range(lent1):for j in range(lent2):for k in range(lent3):img_cv[i][j][k] = solv[img_cv[i][j][k]]
cv2.namedWindow("b")
cv2.imshow("b", img_cv)
cv2.waitKey()
cv2.destroyAllWindows()
把所有的代码拼起来应该就可以运行了吧。
图片加密(一)颜色加密相关推荐
- 关于图片转base64的加密解密
这个插件裁剪完的图片都是 base64 加密的字符串,上传头像也就涉及到了如何把加密的字符串转换成图片的问题. 以下是代码: /*** @Description: 将base64编码字符串转换为图片* ...
- JackHttp -- 浅谈编码、加密(对称加密,非对称加密,Hash算法)
如果你还不清楚 JackHttp 是什么,请戳这里!!! JackHttp 是一个网络框架系列,为什么还要分享编码和加密呢?主要有如下几个原因: HTTP 在网络传输过程中是明文的. HTTP 在网络 ...
- 位操作的应用:无参数交换数据,异或加密,循环移位加密【位操作】(56)
有参数交换数据 无参数交换数据 异或加密(文本与二进制) key 为单个字符 key 为字符串 循环移位加密(文本与二进制) 有参数交换数据 #include <stdio.h>void ...
- 对称加密与非对称加密的区别_https原理及对称加密、非对称加密、数字证书、数字签名的含义...
一.为什么要使用https 使用https的原因其实很简单,就是因为http的不安全. 当我们往服务器发送比较隐私的数据(比如说你的银行卡,身份证)时,如果使用http进行通信.那么安全性将得不到保障 ...
- 对称加密、非对称加密深度解析
密码学的发展 加密的发展史随着人类的进化逐步复杂.严谨也更安全,对于早期的移位和字母对应等加密方式我们不难理解. 移位 : 比如恺撒密码, 简单点说将 26个英文字母的顺序打乱,得到一个新的字母顺序, ...
- 对称加密、非对称加密和散列算法
一.什么是对称加密技术? 对称加密采用了对称密码编码技术,它的特点是文件加密和解密使用相同的密钥.信息接收双方都需事先知道密匙和加解密算法,且其密匙是相同的,之后便是对数据进行加解密了.对称加密算法用 ...
- 详解js对称加密和非对称加密
详解js对称加密和非对称加密 https保证数据在传输过程中不被窃取和篡改,从而保证传输安全 1.加密 对称加密:产生一个密钥,可以用其加密,可以用其加密,也可以用其加解密. 这个密钥可以是任何东西, ...
- 对称加密和非对称加密是什么?
本文内容如有错误.不足之处,欢迎技术爱好者们一同探讨,在本文下面讨论区留言,感谢. 文章目录 简述 术语 对称加密 非对称加密 区别 总结 参考资料 简述 在当今的网络世界中,存在着未经授权访问所有形 ...
- 如何给U盘,SD卡加密(压缩加密与veracrypt加密)
如何给U盘,SD卡之类的存贮设备加密? 如果你已经是Windows专业版,那么不用看本篇教程 可以直接用bitlocker加密... 但是对于我这样家庭版的用户来说,还有两种方法 压缩文件加密 通过软 ...
最新文章
- 我敢打赌!你见过的所有程序员都是这样的!!!
- IntelliJ IDEA删除所有断点
- docker之centos7安装docker
- Java利用jenkins做项目的自动化部署
- 3d 自动生成物体_相芯科技首秀SIGGRAPH,3D形象自动生成火了
- 屏幕文字识别_手机长按屏幕2秒,能开启4个实用功能,一键提取图片上的文字...
- 【bzoj1758】[Wc2010]重建计划
- Language binding(语言绑定)
- msfconsole启动失败并报错`not_after=‘: bignum too big to convert into `long‘的解决方法
- Linux查看服务器自动关机,Linux系统自动关机的命令详解
- toastr 使用笔记
- 学习_011_Hive在大数据分析和大数据仓库中应用实战玩转大数据之Hive应用实战
- 最详细的jsp基础教程
- HTML基础(一)HTML标签
- 处理UNICODE下【中文乱码】异常
- Redis集群cluster:增加删除(伸缩)节点操作步骤
- mysql设置最大使用内存_设置MySQL使用大内存页面
- Java培训,看这一篇就够了
- UI----Android开发艺术字体设置
- 浅谈VMware Workstation Pro 使用Linux系统(超详细教程)