欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

利用python設(shè)計圖像加密技術(shù)(Arnold算法)

 更新時間:2022年03月10日 09:03:45   作者:機器學(xué)習(xí)入坑者  
這篇文章主要介紹了利用python設(shè)計圖像加密技術(shù)(Arnold算法),本文將借助Arnold置亂法,講解如何用python從頭至尾設(shè)計出一套圖像加密算法,需要的小伙伴可以才參考一下

下面展示了圖像的加密和解密過程(左邊是輸入圖像,中間是加密后的結(jié)果,右邊是解密后的圖像):

1、加密算法要求

  • (1)加密算法必須是可逆的,擁有配套的解密算法
  • (2)必須是安全的,攔截者不能輕易的破解加密方式
  • (3)不能造成數(shù)據(jù)量劇增,比如一個1kb的圖像加密后變?yōu)?00kb

2、Arnold置亂原理

Arnold置亂又稱為貓臉置亂,據(jù)說是因為Arnold首先對貓臉圖像應(yīng)用了這個算法。置亂的含義是置換和打亂,也就是將原始的圖片按照我們設(shè)計的規(guī)則,進行順序打亂的操作。

所謂的打亂次序指的是對圖像進行“坐標(biāo)變換”,只不過這種變換不是隨意的變換,變換需要具有兩個硬性要求:

  • (1)變換就是加密,那么必須存在對應(yīng)的逆變換(解密)
  • (2)變換能保證圖像的像素被徹底打亂,觀察者看不出加密后圖像包含的信息

為此,Arnold發(fā)明了下面的變換方式:

其中x和y表示坐標(biāo),new表示變換以后的坐標(biāo),ori表示原始的坐標(biāo)(original縮寫),a和b是兩個可選的參數(shù),mod為求余數(shù)操作,N是圖像的長或者寬,這里只考慮長度和寬度相等的圖像,上式表示的就是“圖像的坐標(biāo)變換”。

有了加密變換,還需要使用對應(yīng)的解密變換,也就是逆變換。逆變換就是“求矩陣的逆”,對2x2的矩陣求逆就能得到下面的逆變換矩陣:

根據(jù)加密變換和解密變換,就能設(shè)計圖像加密算法和解密算法了!

實際上,上面的加密和解密也都是常規(guī)的矩陣變換,一點都不難!

3、python實現(xiàn)

根據(jù)上一節(jié)的加密變換公式可知,有幾個參數(shù)是必須考慮的,比如:打亂的次數(shù),a和b的取值(我覺得這兩個值是隨便取的,取不同值加密結(jié)果不同),N是圖像的長度或者寬度所以不需要指定。

加密函數(shù)如下:

def arnold_encode(image, shuffle_times, a, b):
? ? """ Arnold shuffle for rgb image
? ? Args:
? ? ? ? image: input original rgb image
? ? ? ? shuffle_times: how many times to shuffle
? ? Returns:
? ? ? ? Arnold encode image
? ? """
? ? # 1:創(chuàng)建新圖像
? ? arnold_image = np.zeros(shape=image.shape)
? ??
? ? # 2:計算N
? ? h, w = image.shape[0], image.shape[1]
? ? N = h ? # 或N=w
? ??
? ? # 3:遍歷像素坐標(biāo)變換
? ? for time in range(shuffle_times):
? ? ? ? for ori_x in range(h):
? ? ? ? ? ? for ori_y in range(w):
? ? ? ? ? ? ? ? # 按照公式坐標(biāo)變換
? ? ? ? ? ? ? ? new_x = (1*ori_x + b*ori_y)% N
? ? ? ? ? ? ? ? new_y = (a*ori_x + (a*b+1)*ori_y) % N
? ? ? ? ? ? ? ??
? ? ? ? ? ? ? ? arnold_image[new_x, new_y, :] = image[ori_x, ori_y, :]
? ? ? ? ? ??
? ? return arnold_image

調(diào)用加密函數(shù)以后可以得到如下的加密結(jié)果:

現(xiàn)在,誰還能看出來加密后的圖像(左邊是原始圖,右邊是加密后的圖)表達什么?

除非你有下面的解密代碼:

def arnold_decode(image, shuffle_times, a, b):
? ? """ decode for rgb image that encoded by Arnold
? ? Args:
? ? ? ? image: rgb image encoded by Arnold
? ? ? ? shuffle_times: how many times to shuffle
? ? Returns:
? ? ? ? decode image
? ? """
? ? # 1:創(chuàng)建新圖像
? ? decode_image = np.zeros(shape=image.shape)
? ??
? ? # 2:計算N
? ? h, w = image.shape[0], image.shape[1]
? ? N = h # 或N=w
? ??
? ? # 3:遍歷像素坐標(biāo)變換
? ? for time in range(shuffle_times):
? ? ? ? for ori_x in range(h):
? ? ? ? ? ? for ori_y in range(w):
? ? ? ? ? ? ? ? # 按照公式坐標(biāo)變換
? ? ? ? ? ? ? ? new_x = ((a*b+1)*ori_x + (-b)* ori_y)% N
? ? ? ? ? ? ? ? new_y = ((-a)*ori_x + ori_y) % N
? ? ? ? ? ? ? ? decode_image[new_x, new_y, :] = image[ori_x, ori_y, :]
? ? return decode_image

調(diào)用解密代碼,就能恢復(fù)最右邊的“decode”了:

4、結(jié)果分析與總結(jié)

自己還嘗試了不同的a和b的值獲得的不同加密效果:

男神鎮(zhèn)樓!

(1)a = 1, b = 1:

(2)a=1,b=3:

(3)a=1,b=7:

(4) a=7, b=1:

可以看出:a和b作為控制加密的參數(shù),不同的選擇方式可以獲得不同的加密效果。

到此這篇關(guān)于利用python設(shè)計圖像加密技術(shù)(Arnold算法)的文章就介紹到這了,更多相關(guān)python圖像加密內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python opencv如何實現(xiàn)圖片繪制

    python opencv如何實現(xiàn)圖片繪制

    這篇文章主要介紹了python opencv如何實現(xiàn)圖片繪制,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-01-01
  • 用Python的Tornado框架結(jié)合memcached頁面改善博客性能

    用Python的Tornado框架結(jié)合memcached頁面改善博客性能

    這篇文章主要介紹了用Python的Tornado框架結(jié)合memcached頁面改善vLog性能,主要使用到了緩存來提升性能,需要的朋友可以參考下
    2015-04-04
  • python腳本內(nèi)運行l(wèi)inux命令的方法

    python腳本內(nèi)運行l(wèi)inux命令的方法

    這篇文章主要介紹了python腳本內(nèi)運行l(wèi)inux命令的方法,實例分析了Python基于subprocess模塊操作Linux命令的相關(guān)技巧,需要的朋友可以參考下
    2015-07-07
  • 一文教會你調(diào)整Matplotlib子圖的大小

    一文教會你調(diào)整Matplotlib子圖的大小

    Matplotlib的可以把很多張圖畫到一個顯示界面,這就設(shè)計到面板切分成一個一個子圖,下面這篇文章主要給大家介紹了關(guān)于調(diào)整Matplotlib子圖大小的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-06-06
  • 使用pygame模塊編寫貪吃蛇的實例講解

    使用pygame模塊編寫貪吃蛇的實例講解

    下面小編就為大家分享一篇使用pygame模塊編寫貪吃蛇的實例講解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-02-02
  • 深度學(xué)習(xí)TextLSTM的tensorflow1.14實現(xiàn)示例

    深度學(xué)習(xí)TextLSTM的tensorflow1.14實現(xiàn)示例

    這篇文章主要為大家介紹了深度學(xué)習(xí)TextLSTM的tensorflow1.14實現(xiàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-01-01
  • 總結(jié)用Pdb庫調(diào)試Python的方式及常用的命令

    總結(jié)用Pdb庫調(diào)試Python的方式及常用的命令

    大家都知道Python是自帶Pdb庫,使用Pdb調(diào)試Python程序還是很方便的。但是遠(yuǎn)程調(diào)試、多線程,Pdb是搞不定的,下面一起來看看用Pdb庫調(diào)試Python的方式及常用的命令。
    2016-08-08
  • Python中re模塊常用方法總結(jié)分析

    Python中re模塊常用方法總結(jié)分析

    這篇文章主要為大家介紹了Python中re模塊常用方法,并對這些常用方法進行總結(jié)分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2021-09-09
  • 通過Python把學(xué)姐照片做成拼圖游戲

    通過Python把學(xué)姐照片做成拼圖游戲

    馬上就到畢業(yè)季了,你心中的那個學(xué)姐,你真的放下了嗎?本文將用pygame為你的學(xué)姐,定制開發(fā)一個拼圖游戲,感興趣的快跟隨小編一起學(xué)習(xí)一下
    2022-02-02
  • TensorFlow實現(xiàn)卷積神經(jīng)網(wǎng)絡(luò)

    TensorFlow實現(xiàn)卷積神經(jīng)網(wǎng)絡(luò)

    這篇文章主要為大家詳細(xì)介紹了TensorFlow實現(xiàn)卷積神經(jīng)網(wǎng)絡(luò),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-05-05

最新評論