混沌理论作业简析——两人一组_图像加密解密小游戏
生活随笔
收集整理的這篇文章主要介紹了
混沌理论作业简析——两人一组_图像加密解密小游戏
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
?
🍊作者簡介:禿頭小蘇,致力于用最通俗的語言描述問題
🍊往期回顧:霍夫直線檢測原理詳解 ? 霍夫直線檢測代碼實戰
🍊近期目標:擁有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~~點個贊唄
總結
以上是生活随笔為你收集整理的混沌理论作业简析——两人一组_图像加密解密小游戏的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 红贝应用架构配置式应用开发示例
- 下一篇: 双绞线 简单的命令