混沌理论作业简析——两人一组_图像加密解密小游戏
?
🍊作者簡(jiǎn)介:禿頭小蘇,致力于用最通俗的語言描述問題
🍊往期回顧:霍夫直線檢測(cè)原理詳解 ? 霍夫直線檢測(cè)代碼實(shí)戰(zhàn)
🍊近期目標(biāo):擁有2000粉絲
🍊支持小蘇:點(diǎn)贊👍🏼、收藏?、留言📩
??
?
寫在前面
??最近混沌理論的課程要求倆人一組進(jìn)行圖像的加密和解密,即一個(gè)人來對(duì)一張圖像進(jìn)行加密,另一個(gè)人對(duì)加密后的圖像進(jìn)行解密。🥗🥗🥗對(duì)圖像加密的方式有很多種,很自然的想法就是在圖像中加入一些隨機(jī)的噪點(diǎn),讓原始圖像變得不清晰。當(dāng)然方法太多太多,感興趣的小伙伴可以在評(píng)論區(qū)說說你的想法喔🍐🍐🍐
??先來說一下這節(jié)我的思路【我也是才學(xué),加密方式不好勿噴👰👰👰】對(duì)于加密:我主要采用的是對(duì)一張圖像的三個(gè)通道分別進(jìn)行加密,具體加密方式是通過生成隨機(jī)矩陣來和不同通道的圖像進(jìn)行異或運(yùn)算。對(duì)于解密:解密者需要得到加密后的圖像和生成的隨機(jī)矩陣方可解密。下面直接看代碼:
??首先是導(dǎo)入一些必要的庫及定義了一個(gè)畫圖的函數(shù)【這樣方便后面畫圖啦】
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數(shù)組存儲(chǔ)下來 # 分別對(duì)3個(gè)通道進(jìn)行異或 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) #保存加密圖像輸出結(jié)果:
?
解密
Rand1 = np.load("Rand.npy") #將Rand數(shù)組讀取出來 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)輸出結(jié)果:
?
思考
??我們這里可以進(jìn)行一些思考,即是否可以采用其他的一些加密方式,這里提供我的一些思路【隨便想的,不一定保證正確】:
- 不采用隨機(jī)矩陣進(jìn)行異或,而是讓圖片自身進(jìn)行異或,這樣的好處是解密時(shí)不需要提供隨機(jī)矩陣,而是僅僅提供一張加密后圖片即可進(jìn)行解密,壞處也很明顯,那就是不安全。
- 能否改變圖片的通道順序?qū)ζ浼用?/li>
- 對(duì)一張圖像進(jìn)行卷積進(jìn)行加密,然后利用反卷積解密
感興趣的大家可以一些來思考,把靈感留在評(píng)論區(qū),萬分感謝🙏🙏🙏
?
?
如若文章對(duì)你有所幫助,那就🛴🛴🛴
咻咻咻咻~~duang~~點(diǎn)個(gè)贊唄
總結(jié)
以上是生活随笔為你收集整理的混沌理论作业简析——两人一组_图像加密解密小游戏的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 红贝应用架构配置式应用开发示例
- 下一篇: 双绞线 简单的命令