混沌理论作业简析——两人一组_图像加密解密小游戏

举报
秃头小苏 发表于 2022/05/22 10:42:49 2022/05/22
【摘要】  🍊作者简介:秃头小苏,致力于用最通俗的语言描述问题🍊往期回顾:霍夫直线检测原理详解   霍夫直线检测代码实战🍊近期目标:拥有2000粉丝🍊支持小苏:点赞👍🏼、收藏⭐、留言📩    写在前面  最近混沌理论的课程要求俩人一组进行图像的加密和解密,即一个人来对一张图像进行加密,另一个人对加密后的图像进行解密。🥗🥗🥗对图像加密的方式有很多种...

 

🍊作者简介:秃头小苏,致力于用最通俗的语言描述问题

🍊往期回顾:霍夫直线检测原理详解霍夫直线检测代码实战

🍊近期目标:拥有2000粉丝
🍊支持小苏:点赞👍🏼、收藏⭐、留言📩

  
 

写在前面

  最近混沌理论的课程要求俩人一组进行图像的加密和解密,即一个人来对一张图像进行加密,另一个人对加密后的图像进行解密。🥗🥗🥗对图像加密的方式有很多种,很自然的想法就是在图像中加入一些随机的噪点,让原始图像变得不清晰。当然方法太多太多,感兴趣的小伙伴可以在评论区说说你的想法喔🍐🍐🍐
  先来说一下这节我的思路【我也是才学,加密方式不好勿喷👰👰👰】==对于加密==:我主要采用的是对一张图像的三个通道分别进行加密,具体加密方式是通过生成随机矩阵来和不同通道的图像进行异或运算。==对于解密==:解密者需要得到加密后的图像和生成的随机矩阵方可解密。下面直接看代码:

  首先是导入一些必要的库及定义了一个画图的函数【这样方便后面画图啦】

import cv2 #opencv读取的格式是BGR
import matplotlib.pyplot as plt
import numpy as np 
%matplotlib inline 
def cv_show(name,img):
    cv2.imshow(name,img) 
    cv2.waitKey(0) 
    cv2.destroyAllWindows()

 



加密

img = cv2.imread('Lenna.png')
cv_show('img',img)
# 颜色通道获取
b,g,r=cv2.split(img)
Rand = np.random.randint(0, 256, size=(3,256, 256), dtype=np.uint8) 
np.save("Rand.npy", Rand)   #将Rand数组存储下来
# 分别对3个通道进行异或
b_rand = cv2.bitwise_xor(b, Rand[0])  
g_rand = cv2.bitwise_xor(g, Rand[1])
r_rand = cv2.bitwise_xor(r, Rand[2])
img_encryption = cv2.merge((b_rand,g_rand,r_rand))
cv_show('img_encryption',img_encryption)
cv2.imwrite('img_encryption.png',img_encryption)   #保存加密图像

==输出结果:==
在这里插入图片描述
在这里插入图片描述

 

解密

Rand1 = np.load("Rand.npy")   #将Rand数组读取出来
img_encryption = cv2.imread('img_encryption.png')   #读取加密图像
b_rand,g_rand,r_rand=cv2.split(img_encryption)
b_rec = cv2.bitwise_xor(b_rand, Rand1[0]) 
g_rec = cv2.bitwise_xor(g_rand, Rand1[1])
r_rec = cv2.bitwise_xor(r_rand, Rand1[2]) 
img_decode = cv2.merge((b_rec,g_rec,r_rec))
cv_show('img_decode',img_decode)

==输出结果:==
在这里插入图片描述
 

思考

  我们这里可以进行一些思考,即是否可以采用其他的一些加密方式,这里提供我的一些思路【随便想的,不一定保证正确】:

  • 不采用随机矩阵进行异或,而是让图片自身进行异或,这样的好处是解密时不需要提供随机矩阵,而是仅仅提供一张加密后图片即可进行解密,坏处也很明显,那就是不安全。
  • 能否改变图片的通道顺序对其加密
  • 对一张图像进行卷积进行加密,然后利用反卷积解密

==感兴趣的大家可以一些来思考,把灵感留在评论区,万分感谢==🙏🙏🙏

 
 
如若文章对你有所帮助,那就🛴🛴🛴

咻咻咻咻~~duang~~点个赞呗

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。