【圖像加密】圖像處理之約瑟夫置亂加密


前言:本文原發表在新浪博客http://blog.sina.com.cn/s/blog_b27f71160101h5hb.html,現新浪博客將其搬家至CSDN,原新浪博客停止更新。

①申請搬家后,遲遲未能收到申請搬家的碼

②再熟悉一下算法

③聯系鍵盤打字

基於以上三點,遂將博文重新敲一遍。


約瑟夫置亂加密

    如果看了前兩篇博客的朋友都會知道這個思路,如果沒有看,那么請先看這里:

圖像處理之Logistic混沌序列加密

圖像處理之Logistic混沌置亂加密

如果你看了,那么好極了,下面我們利用約瑟夫遍歷來產生這個序列。什么是約瑟夫遍歷呢,先介紹一下:約瑟夫環。
    約瑟夫環是一個數學的應用問題:已知n個人(以編號1,2,3...n分別表示)圍坐在一張圓桌周圍。從編號為k的人開始報數,數到m的那個人出列;他的下一個人又從1開始報數,數到m的那個人又出列;依此規律重復下去,直到圓桌周圍的人全部出列。

    大概知道了吧,或許你已經想到該怎么做了。對的,我們就是按照這個算法來進行遍歷,只是n的長度擴展到M*N(假如待加密圖像為M*N大小),這樣就可以得到一個一維亂序了,在轉為二維亂序,這就是我們想要的二維置亂序列。
    當然,在遍歷之前我們需要知道幾個參數:
       ①起始位置
       ②間隔(暫稱約瑟夫距離)
這些參數,我們就作為秘鑰。
下面是MATLAB代碼,因為每個程序員看別人的代碼都不是很舒服,所以對於代碼不多解釋,看得懂的就看,看不懂的自己寫也不麻煩。
%--------------------------------------------------------------------------
function v=joseph_traverse(picture,start,space)
t=picture;
[a,b]=size(t);
t=reshape(t',1,a*b);
value=a*b;
m=zeros(1,value);%存儲標記序列
e=zeros(1,value);%存儲置亂序列
cnt1=0;%用於記錄下標
cnt2=0;%用於記錄距離
flag=1;
while flag==1
start=mod(start,value);
if start==0%下標越界處理
start=value;
end
while cnt2~=space
%跳過標記區
while m(1,start)==1
start=start+1;
start=mod(start,value);
if start==0
start=value;
end
end
cnt2=cnt2+1;
start=start+1;
start=mod(start,value);
if start==0
start=value;
end
end
start=mod(start-1+value,value);
if start==0
start=value;
end
cnt2=0;%清除距離,一遍下一次遍歷計數
cnt1=cnt1+1;
m(1,start)=1;%已遍歷過該點,標記防止重復遍歷
e(1,cnt1)=t(1,start);
%遍歷結束
if cnt1==value
flag=0;
end
end
v=reshape(e,a,b);
v=uint8(v);
%完


关注微信公众号

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com