本發明屬于地理信息安全領域,具體涉及一種基于三維混沌序列對DEM進行置亂加密與還原的方法。
背景技術:
DEM(Digital Elevation Model,即數字高程模型),是用一組有序數值陣列表示地面高程值的一種實體地面模型。由于DEM描述的是地面高程信息,它在測繪、水文、氣象、地貌、地質、土壤、工程建設、通訊、軍事等國民經濟和國防建設以及人文和自然科學領域有著廣泛的應用。DEM作為一種基礎地理信息資源,具有重要的軍事價值和經濟價值,是測繪部門和應用單位的重點保護對象,有必要在傳輸和存儲過程中進行置亂加密操作。
長期以來,針對DEM的加密技術研究甚少,且主要集中于應用傳統流式文件的一般加密方法進行加密。這種簡單粗暴的加密方法,既破環了文件的基本結構,又容易引發數據破譯者的興趣。因此迫切需要研發一種安全性高、隱蔽性好的DEM置亂加密與還原方法。
技術實現要素:
本發明的目的在于,克服現有技術存在的缺陷,提供一種DEM置亂加密與還原方法,利用三維混沌技術,分別通過對頭文件置亂、對高程置亂和對位置置亂,形成針對DEM的置亂加密與還原,可有效解決DEM數據的安全傳輸與封裝存貯環節中的地理信息安全問題。
為了實現上述目的,本發明采取的技術方案如下:
一、DEM的置亂加密方法,其步驟如下:
步驟1:基于ArcMap軟件,通過ArcToolbox->轉換工具->由柵格轉出->柵格轉ASCII操作,將Esri Grid格式的DEM數據轉化為ASCII編碼的txt文件。
步驟2:將txt文件以行為主序存入一M×N矩陣A中,其中M為DEM的行數,N為DEM的列數,并從DEM的頭文件中讀取出DEM的像元大小cellsize,左上角x起始坐標xllcorner和左上角y起始坐標yllcorner。
步驟3:輸入x1、y1、z1作為混沌系統的初值,且x1∈(0,1),y1∈(0,1),z1∈(0,1)。輸入置亂因子ρ的值,且ρ∈[1,1000]。定義參數σ的值,且σ∈(0,1)。
步驟4:根據公式(1),生成混沌序列X、Y和Z;其中X={xk|k=1,2,3,...,max{M+N+13,10000}},Y={yk|k=1,2,3,...,max{M+N+13,10000}},Z={zk|k=1,2,3,...,max{M+N+13,10000}};
步驟5:獲取序列S、J、Q、J′、Q′、I和T。其中S為待和Z進行異或操作的序列。J、Q為對行號進行位置置亂操作的序列。J′、Q′為對列號進行位置置亂操作的序列。I和T為對Z值進行位置置亂操作的序列。
步驟5.1,根據公式(2)和(3),對混沌序列Z進行非線性離散化,生成序列S,S={sk|k=1,2,3,...,M+N+13};
步驟5.2,設混沌序列X的子集X′={x1,x2,x3,...,x10000}的索引號序列{1,2,3,…,10000}為序列J;將組元(xn,jn)以xn為主要關鍵字進行升序排序,將排序后的序列J記為序列Q。
步驟5.3,設混沌序列Y的子集Y′={y1,y2,y3,...,y10000}的索引號序列{1,2,3,…,10000}為序列J′;將組元(yn,jn′)以yn為主要關鍵字進行升序排序,將排序后的序列J′記為序列Q′。
步驟5.4,設混沌序列Z的子集Z′={z1,z2,z3,...,z10000}索引號序列{1,2,3,…,10000}為序列I;將組元(zn,in)以zn為主要關鍵字進行升序排序,將排序后的序列I記為序列T。
步驟6:對DEM數據的頭文件進行置亂
根據公式(4)對cellsize、xllcorner和yllcorner進行加密操作,得到加密數據scellsize、sxllcorner和syllcorner;
步驟7:根據序列S、T對矩陣A進行高程置亂
步驟7.1,將矩陣A的一點的高程值Cmn轉為14位的二進制數表示,其中m和n為對應的行號與列號;m∈[1,M],n∈[1,N]。
步驟7.2,若m+n為奇數,則先將Cmn的低7位與高7位進行交換;若m+n為偶數則不變;選取S的一14位子序列{sm+n,sm+n+1,sm+n+2,…,sm+n+13}按位與Cmn異或。
步驟7.3,將異或后的結果轉化為十進制數表示,得到變化后的高程值C′mn。
步驟7.4,基于C′mn,根據公式(5)生成臨時變量b;
b=C′mn modρ (5)。
步驟7.5,在序列T中遍歷尋找值為b的元素,將其序列號記為serialID,則根據公式(6)計算出C″mn;
C″mn=C′mn-b+serialID (6)。
循環執行步驟7.1-步驟7.5,對矩陣A中的每一點都進行如上操作,得到新矩陣A′,其中m和n為對應的行號與列號。
步驟8:根據序列Q、Q′對矩陣A′進行位置置亂:
從矩陣A′的首行首列開始,循環執行步驟8.1-步驟8.4,逐個將矩陣A′中元素C″mn與C″m′n′位置互換,得到矩陣A″;矩陣A″即為對DEM置亂后的最終結果。
步驟8.1,根據公式(7),利用矩陣A′中的每一元素C″mn的行號m,生成臨時變量p;
p=m modρ (7)。
步驟8.2,在序列Q中遍歷尋找與p值相等的元素,記其下標為serialID′,則根據公式(8),生成m′;
m′=m-p+serialID′ (8)。
步驟8.3,根據公式(9),利用矩陣A′中的元素C″mn的列號n,生成p′;
p′=n modρ (9)。
步驟8.4,在序列Q′中遍歷尋找與p′值相等的元素,記其下標為serialID″,則根據公式(10),生成n′;
n′=n-p′+serialID″ (10)。
步驟9:基于置亂加密后的數據,生成置亂加密后的txt文件。
步驟10:基于ArcMap軟件,通過“ArcToolbox->轉換工具->轉為柵格->ASCII轉柵格”操作,將txt文件轉換為Esri Grid格式的DEM數據。
(二)DEM置亂還原方法(DEM置亂的還原過程),包括如下步驟:
步驟A:基于ArcMap軟件,通過“ArcToolbox->轉換工具->由柵格轉出->柵格轉ASCII”操作,將DEM數據轉化為ASCII編碼的txt文件;從txt中讀取數據至矩陣A″。
步驟B:將置亂后的DEM以行為主序存入行數為M,列數為N的矩陣A″中,其中M為置亂后的DEM的行數,N為置亂后的DEM的列數,并從DEM的頭文件中讀取出置亂后的DEM數據的像元大小scellsize、左上角x起始坐標sxllcorner和左上角y起始坐標syllcorner。
步驟C:輸入x1、y1、z1作為混沌系統的初值,且x1∈(0,1),y1∈(0,1),z1∈(0,1)。輸入置亂因子ρ的值,且ρ∈[1,10000]。定義參數σ的值,且σ∈(0,1)。
步驟D:根據公式(1),生成混沌序列X、Y和Z;其中X={xk|k=1,2,3,...,max{M+N+13,10000}},Y={yk|k=1,2,3,...,max{M+N+13,10000}},Z={zk|k=1,2,3,...,max{M+N+13,10000}}。
步驟E:獲取序列S、J、Q、J′、Q′、I和T
步驟E.1,根據公式(2)和(3),對混沌序列Z進行非線性離散化,生成序列S,S={sk|k=1,2,3,...,M+N+13}。
步驟E.2,設混沌序列X的子集X′={x1,x2,x3,...,x10000}的索引號序列{1,2,3,…,10000}為序列J;將組元(xn,jn)以xn為主要關鍵字進行升序排序,將排序后的序列J記為序列Q;
步驟E.3,設混沌序列Y的子集Y′={y1,y2,y3,...,y10000}的索引號序列{1,2,3,…,10000}為序列J′;將組元(yn,jn′)以yn為主要關鍵字進行升序排序,將排序后的序列J′記為序列Q′。
步驟E.4,設混沌序列Z的子集Z′={z1,z2,z3,...,z10000}索引號序列{1,2,3,…,10000}為序列I。將組元(zn,in)以zn為主要關鍵字進行升序排序,將排序后的序列I記為序列T。
步驟F:對DEM的頭文件進行還原
根據公式(11)對scellsize、sxllcorner和syllcorner進行還原操作,得到還原數據cellsize、xllcorner和yllcorner;
步驟G:根據序列Q和Q′對矩陣A″中的置亂后的位置進行還原
從矩陣A″末行末列開始,循環執行步驟G.1-步驟G.1,逐個往前將矩陣A′中元素C″m′n′與C″mn互換,得到矩陣A′,其中m和n為矩陣A′中對應的行號與列號:
步驟G.1,根據公式(12),利用矩陣A″中的元素C″m′n′的行號m′,生成serialID′;其中m′和n′為對應的行號與列號
serialID′=m′modρ (12)。
步驟G.2,尋找序列Q中索引號為serialID′的元素,記其值為p,根據公式(13),生成m;
m=m′+p-serialID′ (13)。
步驟G.3,根據公式(14),利用矩陣A″中的元素C″m′n′的列號n′,生成serialID″;
serialID′′=n′modρ (14)。
步驟G.4,尋找序列Q′中索引號為serialID′′的元素,記其值為p′,根據公式(15),生成n;
n=n′+p′-serialID″ (15)。
步驟H:根據序列S、T對矩陣A′中的數據進行高程還原
循環執行步驟H.2-步驟H.5,對矩陣A′中的每個點循環執行上述操作,得到矩陣A,矩
陣A即為還原后的最終結果:
步驟H.1,根據公式(16),利用矩陣A′中的元素C″mn,生成serialID;
serialID=C″mn modρ (16)。
步驟H.2,尋找矩陣A′中索引號為serialID的元素,記其值為b,則根據公式(17),得到
C′mn=C″mn+b-serialID (17)。
步驟H.3,將C′mn用14位的二進制數表示,其中m∈[1,M],n∈[1,N]。
步驟H.4,選取S的一14位子序列{Sm+n,Sm+n+1,Sm+n+2,…,Sm+n+13}與C′mn的14位二進制數,進行按位異或操作;若m+n為奇數,則將異或結果的低7位與高7位進行交換,若m+n為偶數,則不變。
步驟H.5,將變換后的高程值轉化為十進制得到Cmn。
步驟I:基于ArcMap軟件,通過“ArcToolbox->轉換工具->轉為柵格->ASCII轉柵格”操作,將txt文件轉換為Esri Grid格式的DEM數據,完成DEM的還原處理。
本發明方法利用三維混沌技術,分別通過對頭文件置亂、對高程置亂和對位置置亂,形成針對DEM的置亂加密與還原,可有效解決DEM數據的安全傳輸與封裝存貯環節中的地理信息安全問題。
附圖說明
圖1本發明的流程圖(a.置亂加密流程,b.還原流程)。
圖2實驗數據。
圖3置亂加密后的處理結果。
圖4還原后的處理結果。
具體實施方式
下面結合附圖和實施例做進一步詳細說明
實施例1
本實例選取的是1:50000的廬山局部DEM數據,數據格式為Esri Grid格式。針對數據格式的轉化、數據讀取、置亂加密、還原的整個過程,給出本發明的一個實施例。
1、基于混沌序列的DEM的置亂加密過程
步驟11:
1)在ArcMap打開數據,用ArcToolbox->轉換工具->由柵格轉出->柵格轉ASCII,將DEM數據轉化為ASCII編碼的txt文件。本實例選取的數據在ArcScene中三維顯示如圖2。
步驟12:
首先,讀取txt格式的DEM數據的頭文件。其中xllcorner=390996,yllcorner=3274219,cellsize=5。其次,讀取各點高程值。該實例中開辟的是935行,1220列的二維陣列。
步驟13:輸入三維混沌序列的初值x1=0.21,y1=0.32,z1=0.44。并設置σ=0.45,ρ=10000。
步驟14:根據公式(1),生成序列長度為2168的混沌序列X,X={0.21,0.97,0.81,…,0.88}、序列長度為2168的混沌序列Y,Y={0.32,0.94,0.63,…,0.77}和序列長度為2168的混沌序列Z,Z={0.44,0.91,0.45,…,0.67}。
步驟15:獲取序列S、J、Q、J′、Q′、I和T
1)對混沌序列Z進行非線性離散化。根據公式(2)、(3)得到含2168個元素的0-1序列S,S={0,1,0,1,…,1}。
2)設混沌序列X的子集X′={x1,x2,x3,...,x10000}中元素的索引號序列{1,2,3,...,10000}為序列J。將組元(xn,jn)以xn為主要關鍵字進行升序排序,將排序后的序列J記為序列Q,Q={2,4,6,...,2167,1}。
3)設混沌序列Y的子集Y′={y1,y2,y3,…,y10000}中元素的索引號序列{1,2,3,...,10000}為序列J′。將組元(yn,jn′)以yn為主要關鍵字進行升序排序,將排序后的序列J′記為序列Q′,Q′={2,4,6,...,2167,1}。
4)設混沌序列Z的子集Z′={z1,z2,z3,…,z10000}的索引號序列{1,2,3,...,10000}為序列I。將組元(zn,in)以zn為主要關鍵字進行升序排序,將排序后的序列I記為序列T,T={5,7,9,…,3,1}。
步驟16:進行頭文件置亂。
根據公式(14)對cellsize=5、xllcorner=390996和yllcorner=3274219進行置亂加密操作,得到置亂加密數據Scellsize=1140697、Sxllcorner=1347720和Syllcorner=2134583。
步驟17:進行高程置亂。
1)以m=15,n=98為例。將該點處的高程值202用14位的二進制數表示為00000011001010,記為Cmn(m、n分別為行列號,m∈[1,935],n∈[1,1220])。
2)m+n=113為奇數,則將低7位與高7位進行交換,得到10010100000001。選取離散化產生的部分序列S113,S114,S115,…,S126與Cmn異或,即將01010101010101與10010100000001進行異或。
3)將異或后的結果11000001010100轉化為十進制,得到變化后的高程值C′mn=12372。
4)基于C′mn,根據公式(5)生成臨時變量b=2372。
5)在序列T中遍歷尋找到值為b的元素,其序列號serialID=7368,則根據公式(6)計算C′mn=17368。
6)對矩陣A中的每一點都進行如上操作,得到新矩陣A′。其中m和n為對應的行號與列號。
步驟18:進行位置置亂。
1)以m=15,n=98為例,根據公式(7),利用矩陣A′中的元素C″mn的行號m生成臨時變量p=15。
2)遍歷尋找序列Q中與p值相等的元素,其下標serialID′=1095,則根據公式(8),生成m′=1095。
3)根據公式(9),利用矩陣A′中的元素C″mn的列號n生成p′=98。
4)遍歷尋找序列Q′中與p′值相等的元素,其下標serialID″=48,則根據公式(10),生成n′=48。
5)從首行首列開始逐個將A′中元素C″mn與C″m′n′位置互換,得到矩陣A″。A″即為對DEM置亂后的最終結果。
步驟19:基于置亂加密后的數據,生成置亂加密后的txt文件。
步驟20:基于ArcMap軟件,通過“ArcToolbox->轉換工具->轉為柵格->ASCII轉柵格”操作,將txt文件轉換為Esri Grid格式的DEM數據,完成DEM的還原處理。置亂后的效果在ArcScene中查看,如圖3。
2.還原過程
步驟21:基于ArcMap軟件,通過“ArcToolbox->轉換工具->由柵格轉出->柵格轉ASCII”操作,將DEM數據轉化為ASCII編碼的txt文件。
步驟22:首先,讀取txt格式的DEM數據的文件頭。其中Scellsize=1140697、Sxllcorner=1347720和Syllcorner=2134583。,將相關參數保存。其次,讀取各點高程值。該實例中開辟的是935行,1220列的二維陣列。
步驟23:生成混沌序列。
輸入三維混沌序列的初值x1=0.23,y1=0.24,z1=0.25。設置σ=0.45,ρ=10000。
步驟24:根據公式(1),生成序列長度為2168的混沌序列X,X={0.21,0.97,0.81,…,0.88}、序列長度為2168的混沌序列Y,Y={0.32,0.94,0.63,…,0.77}和序列長度為2168的混沌序列Z,Z={0.44,0.91,0.45,…,0.67}。
步驟25:獲取序列S、J、Q、J′、Q′、I和T
對混沌序列Z進行非線性離散化。根據公式(2)和(3)得到含2168個元素的0-1序列S,S={0,1,0,1,…,1}。
2)設混沌序列X的子集X′={x1,x2,x3,...,x10000}中元素的索引號序列{1,2,3,...,10000}為序列J。將組元(xn,jn)以xn為主要關鍵字進行升序排序,將排序后的序列J記為序列Q,Q={2,4,6,...,2167,1}。
3)設混沌序列Y的子集Y′={y1,y2,y3,...,y10000}中元素的索引號序列{1,2,3,...,10000}為序列J′。將組元(yn,jn′)以yn為主要關鍵字進行升序排序,將排序后的序列J′記為序列Q′,Q′={2,4,6,...,2167,1}。
4)設混沌序列Z的子集Z′={z1,z2,z3,...,z10000}的索引號序列{1,2,3,...,10000}為序列I。將組元(zn,in)以zn為主要關鍵字進行升序排序,將排序后的序列I記為序列T,T={5,7,9,…,3,1}。
步驟26:頭文件還原。
根據公式(14)對Scellsize=1140697、Sxllcorner=1347720和Syllcorner=2134583進行還原操作,得到還原數據cellsize=5、xllcorner=390996和yllcorner=3274219。
步驟27:位置置亂還原。
具體過程如下:
1)以m′=1095,n′=48為例,根據公式(12),利用矩陣A″中的元素C″m′n′的行號m′=1095生成serialID′=1095。其中m′和n′為對應的行號與列號。
2)尋找序列Q中索引號為serialID′的元素,生成p=15,則根據公式(13),生成m=15。
3)根據公式(14),利用矩陣A″中的元素C″m′n′的列號n′=48,生成serialID″=48。
4)尋找序列Q′中序列號為serialID″的元素,其值p′=98,則根據公式(15),生成n=98。
5)從末行末列逐個往前將A′中元素C″m′n′與C″mn互換,得到矩陣A′。其中m和n為A′中對應的行號與列號。
步驟27:高程還原。
1)以m=15,n=98,對應高程為17368為例,根據公式(16)生成serialID=7368。
2)尋找序列A′中索引號為serialID的元素,其值b=2372,則根據公式(17),得到C′mn=12372。
3)將C′mn用14位的二進制數表示,其中m∈[1,M],n∈[1,N]。
4)選取離散化產生的部分序列S113,S114,S115,…,S126與Cmn異或,即將01010101010101與11000001010100進行異或,得到10010100000001,因為m+n為奇數,所以交換前七位和后七位得到00000011001010。
3)將異或后的結果轉化為十進制,得到變化后的高程值C′mn=202;
5)將變換后的高程值轉化為十進制,得到矩陣A,A即為還原后的最終結果。
步驟28:基于還原處理后的數據,生成還原后的DEM的txt文件。
步驟29:在ArcMap中用ArcToolbox->轉換工具->轉為柵格->ASCII轉柵格,將ASCII編碼的txt文件轉化為Esri Grid格式顯示。本實例選取的數據在ArcScene中三維顯示如圖4。
本發明的有益效果:通過針對DEM數據的置亂加密與還原處理,可安全、高效地解決DEM數據的安全傳輸與封裝存貯環節中的地理信息安全問題。