图片加密(一)颜色加密

前置内容:图片的储存方式

图片是由一个个像素点组成的。对于有色图片来说,每一个像素点的颜色可以由红绿蓝三种颜色合成,也就是可能听说过的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()

把所有的代码拼起来应该就可以运行了吧。

图片加密(一)颜色加密相关推荐

  1. 关于图片转base64的加密解密

    这个插件裁剪完的图片都是 base64 加密的字符串,上传头像也就涉及到了如何把加密的字符串转换成图片的问题. 以下是代码: /*** @Description: 将base64编码字符串转换为图片* ...

  2. JackHttp -- 浅谈编码、加密(对称加密,非对称加密,Hash算法)

    如果你还不清楚 JackHttp 是什么,请戳这里!!! JackHttp 是一个网络框架系列,为什么还要分享编码和加密呢?主要有如下几个原因: HTTP 在网络传输过程中是明文的. HTTP 在网络 ...

  3. 位操作的应用:无参数交换数据,异或加密,循环移位加密【位操作】(56)

    有参数交换数据 无参数交换数据 异或加密(文本与二进制) key 为单个字符 key 为字符串 循环移位加密(文本与二进制) 有参数交换数据 #include <stdio.h>void ...

  4. 对称加密与非对称加密的区别_https原理及对称加密、非对称加密、数字证书、数字签名的含义...

    一.为什么要使用https 使用https的原因其实很简单,就是因为http的不安全. 当我们往服务器发送比较隐私的数据(比如说你的银行卡,身份证)时,如果使用http进行通信.那么安全性将得不到保障 ...

  5. 对称加密、非对称加密深度解析

    密码学的发展 加密的发展史随着人类的进化逐步复杂.严谨也更安全,对于早期的移位和字母对应等加密方式我们不难理解. 移位 : 比如恺撒密码, 简单点说将 26个英文字母的顺序打乱,得到一个新的字母顺序, ...

  6. 对称加密、非对称加密和散列算法

    一.什么是对称加密技术? 对称加密采用了对称密码编码技术,它的特点是文件加密和解密使用相同的密钥.信息接收双方都需事先知道密匙和加解密算法,且其密匙是相同的,之后便是对数据进行加解密了.对称加密算法用 ...

  7. 详解js对称加密和非对称加密

    详解js对称加密和非对称加密 https保证数据在传输过程中不被窃取和篡改,从而保证传输安全 1.加密 对称加密:产生一个密钥,可以用其加密,可以用其加密,也可以用其加解密. 这个密钥可以是任何东西, ...

  8. 对称加密和非对称加密是什么?

    本文内容如有错误.不足之处,欢迎技术爱好者们一同探讨,在本文下面讨论区留言,感谢. 文章目录 简述 术语 对称加密 非对称加密 区别 总结 参考资料 简述 在当今的网络世界中,存在着未经授权访问所有形 ...

  9. 如何给U盘,SD卡加密(压缩加密与veracrypt加密)

    如何给U盘,SD卡之类的存贮设备加密? 如果你已经是Windows专业版,那么不用看本篇教程 可以直接用bitlocker加密... 但是对于我这样家庭版的用户来说,还有两种方法 压缩文件加密 通过软 ...

最新文章

  1. 我敢打赌!你见过的所有程序员都是这样的!!!
  2. IntelliJ IDEA删除所有断点
  3. docker之centos7安装docker
  4. Java利用jenkins做项目的自动化部署
  5. 3d 自动生成物体_相芯科技首秀SIGGRAPH,3D形象自动生成火了
  6. 屏幕文字识别_手机长按屏幕2秒,能开启4个实用功能,一键提取图片上的文字...
  7. 【bzoj1758】[Wc2010]重建计划
  8. Language binding(语言绑定)
  9. msfconsole启动失败并报错`not_after=‘: bignum too big to convert into `long‘的解决方法
  10. Linux查看服务器自动关机,Linux系统自动关机的命令详解
  11. toastr 使用笔记
  12. 学习_011_Hive在大数据分析和大数据仓库中应用实战玩转大数据之Hive应用实战
  13. 最详细的jsp基础教程
  14. HTML基础(一)HTML标签
  15. 处理UNICODE下【中文乱码】异常
  16. Redis集群cluster:增加删除(伸缩)节点操作步骤
  17. mysql设置最大使用内存_设置MySQL使用大内存页面
  18. Java培训,看这一篇就够了
  19. UI----Android开发艺术字体设置
  20. 浅谈VMware Workstation Pro 使用Linux系统(超详细教程)

热门文章

  1. “工资倒挂”成常态,你介意新员工比你工资高吗?
  2. 求解大规模稀疏多目标优化问题的一种进化算法(SparseEA)笔记
  3. python基础--绘制棋盘图形
  4. 简体繁体转换功能php,php如何实现简体繁体转换-PHP问题
  5. 如何解析喜马拉雅的音频文件.
  6. 360全景如何拼接制作?360全景拼接制作教程
  7. 2020 年 7 月编程语言排行榜
  8. OpenCV基于dlib进行人脸关键点检测(摄像头)
  9. 【代理工具使用必备知识汇总】:vpn、socks5、代理客户端使用
  10. gitbook 安装使用