用VC++實現數字圖像迭代混沌加密方法
對于多媒體信息,尤其是圖像和聲音信息,傳統(tǒng)的加密技術將其作為普通數據流進行加密,而不考慮多媒體數據的特點,因此有一定的局限性。所以,在信息領域急切希望擁有更加安全、方便、有效的信息保護手段。那么,我們今天就來看看用用VC++是如何實現數字圖像迭代混沌加密的。
一、混沌及加密原理
1、混沌概述
現代意義的混沌起源于20世紀60年代?;煦缡且环N復雜的動力學行為,按混沌定義可以有不同的分類方法,按照動力學系統(tǒng)的性質,可以分為四種類型,第一類為時間混沌,第二類為空間混沌,第三類為時空混沌,第四類為功能混沌。
混沌現象是在非線性動力學系統(tǒng)中出現確定性的、類隨機的過程,這種過程非周期、不收斂但有界,并且對初始狀態(tài)具有極其敏感的依賴性,即初始狀態(tài)只要有微小的差別的兩個同構混沌系統(tǒng)在較短的時間后就會產生兩組完全不同的、互不相關的混沌序列值。混沌信號具有天然的隨機性,特別是經過一定處理后的混沌信號具有非常大的周期性和優(yōu)良的隨機性,完全可以用來產生符合安全性要求的序列密碼。
更重要的是,混沌系統(tǒng)對初始值和參數的敏感性,可以提供數量很多的密鑰。所以,從以上的特點可以說明混沌系統(tǒng)可以用來產生序列密碼。經過合理設計的混沌密碼加密算法可以形成非常簡單的設計形式。
2、 Logistic映射
Logistic映射模型是混沌模型中比較簡單的一種,它起源于一個經典問題——蟲口模型(worm number)。
![]()
方程式(1)是原始的蟲口模型方程,體現了兩代蟲子的數量關系。將此方程推導一下,可以得出如下方程:
由方程式(2)可以清楚地得到第n代蟲子和第0代蟲子的數量關系,但是從中可以看出此方程不能表現自然的蟲子變化關系,因為蟲子的增長變化不是恒定的,因此這個線性模型完全不能反映蟲口的變化規(guī)律。
所以考慮到很多負面影響:如蟲子太多時,由于食物有限和生存空間有限,還由于疾病等多種原因,使得蟲口數目減少,因此,經過數代人的努力提煉出了Logistic方程:
要此Logistic方程產生混沌的效果,根據研究,a的取值范圍應該在(3.5699,4)之間。在接近4的范圍內產生的混沌序列的隨機性比較好。
3、基于Logistic方程的混沌加密設計
假設{ Pn}是明文信息序列,{Kn}是密鑰信息序列,{Cn}是密文信息序列。
基于混沌的加密算法設計為:
![]()
基于混沌的解密算法設計為:
![]()
本系統(tǒng)采用Logistic映射模型方程作為混沌源,其中的a和Yo作為方程的初始系數,也是我們這個混沌加密系統(tǒng)的加密密鑰。
基于Logistic映射的數字圖像混沌迭代加密算法描述如下:
(1)打開一個BMP圖像文件;
(2)順序讀取圖像中的像素信息P;
(3)根據Logistic映射方程,輸入密鑰[ak,yk],連續(xù)生成8個位,組成一個字節(jié)chaos。
for(i=O;i<8;i++)
{//LoSistic方程
if(Xi>a/6){chaos= (chaos<<1)|1;}else{chaos=chaos <<1;}
}
(4)混沌序列產生的字節(jié)與圖像像素進行異或操作:
C=P Xor chaos,獲得密文C;
(5)輸入下一個密鑰[ ak+1,yk+1],轉至(3)進行計算。直到沒有密鑰。
(6)保存密文C到新的文件中;
設有m個密鑰,此算法中的密鑰量為{[ao,Yo],[a1,y1],…[ am-1,ym-1]},這種設計上增加密鑰量來增加圖像保密的安全性,由于混沌系統(tǒng)對初始值和參數的敏感性,可以看出,這種增加密鑰量的方法是一種有效而更加安全的設計。

上圖中圖像文件加密所使用的密鑰為{[4,0.6],[3.999,0.8],[3.7,0.7],[3.888,0.6]},可以看出,經過迭代加密后的數字圖像可以說是完全失去了原圖像的信息。
對加密后圖像的解密步驟和加密步驟是一樣的,只要把密鑰的輸入方向反向,就可以對加密后的圖像進行解密。
2、混沌加密實例函數實現
下面代碼ChaosEncode()是用于混沌加密和解密的函數,其中l(wèi)pDIBBits指向原DIB圖像指針,IWidth是原圖像寬度(像素數),IHeight是原圖像高度(像素數),Xstart和a是輸入的密鑰變量:

ChaosEncode()函數既可以作為加密函數也可以做為解密函數,以上我們設計的這個加密算法是一種對稱加密算法。
三、混沌加密安全性分析
因為混沌系統(tǒng)對初始值和參數的敏感性,只要有非常微小的差別,兩個同構混沌系統(tǒng)在較短的時間后就會產生兩組完全不同的、互不相關的混沌序列值。根據上面的加密算法我們用一個密鑰K1[4,0.6]進行加密,后用K2[3.999999999999999,0.6]進行解密。如圖所示。
圖像的密鑰第一個參數相差10的-15次方的情況下,得不出原來的圖像,那么在計算機的位數允許情況下可以擁有很多不同的密鑰。密碼的分析者和攻擊者在如此的情況下,要花費的分析量和攻擊量是很大的。而且破譯者無法根據截取密文去重構產生序列密碼的混沌系統(tǒng)的動力學模型、初始狀態(tài)等。這對保密是很有利的。
增加了密鑰的基于Logistic映射的混沌序列密碼加密算法比單個密鑰的基于Logistic映射的混沌序列加密算法有更好的安全性能。因為前者的密鑰量大,有m個參數和m個初始狀態(tài),而后者只有1個參數和1個初始狀態(tài)。它的量化過程是不可逆的,這個特點對安全性非常有利,因為破譯者無法根據截取密文去重構產生序列密碼的混沌系統(tǒng)的動力學模型、初始狀態(tài)等。此外,Logistic映射的加密系統(tǒng)具有很好的運算速度。因此,在實時性要求高的情況下可以采用LogisLic映射的混沌加密方案。和現有的序列密碼加密方法相比,基于混沌系統(tǒng)的序列密碼加密方法可以說是一種安全、有效的加密方法。
小知識之VC++
Microsoft_Visual C++,(簡稱Visual C++、MSVC、VC++或VC)微軟公司的C++開發(fā)工具,具有集成開發(fā)環(huán)境,可提供編輯C語言,C++以及C++/CLI等編程語言。VC++整合了便利的除錯工具,特別是整合了微軟視窗程式設計(Windows API)、三維動畫DirectX API,Microsoft .NET框架。目前最新的版本是Microsoft Visual C++ 2012。









