基于C語言的IDEA加密算法

由于Microson.NET框架的普及,加密技術在.NET開發(fā)中應用非常廣泛,對加密技術的要求也很高。而c語言由于與.NET緊密集成,使得在c語言環(huán)境下實現(xiàn)IDEA加密算法具有很多的優(yōu)勢。

IDEA加密算法原理

IDEA數(shù)據(jù)加密算法基于“相異代數(shù)群上的混合運算”設計思想,它是由16比特串空間的三個不同的群,即一個逐比特異或運算的群,一個模216的加法運算的群,一個模(216+1)的乘法運算的群,由這三種不同運算組合而成的分組密碼結(jié)構(gòu)。這三種運算能產(chǎn)生良好的混淆效果和很強的擴散能力。

IDEA的明文和密文都是64比特,密鑰為128比特,使用8個循環(huán)迭代,除了所用的密鑰不同以外,其加密算法和解密算法都是相同的。如下圖是IDEA的一個實現(xiàn)界面。

基于C語言的IDEA加密算法

1、加密密鑰擴展算法

加密算法和解密均涉及對密鑰進行擴展,IDEA也不例外,實際上,IDEA是將128比特密鑰擴展為832比特的。擴展的加密密鑰數(shù)組m_nKeyEncryptBox [52]由以下步驟生成:

首先,將128比特密鑰串m_sEncryptionKey分成8個子塊,作為首輪8個加密密鑰子塊;

再將128比特循環(huán)左移25位,移位完成后形成的128比特再分成8個子塊,作為第二輪的8個加密密鑰子塊;

依此類推,最終形成832比特(16*6*8+16*4)的加密密鑰數(shù)組m_nKeyEncryptBox[ 52],其核心代碼如下:

基于C語言的IDEA加密算法

 

2、模(216+1)乘算法Mul(ushort x,ushort y)

IDEA加密算法中,下面是模(216+1)乘算法的代碼,注意不能用return (ushorL)((x*y)%Oxl0001))來實現(xiàn)模乘算法。

基于C語言的IDEA加密算法

其中Low16(x)為X的低16位,代碼為:

基于C語言的IDEA加密算法

3、模(216+1)乘逆元算法Mullnv (ushort x)

IDEA加密算法中,基于模(216 +1)的乘法運算群,其單位元是串0- 01,為了求得參數(shù)X的逆元,算法中使用歐幾里德算法(即輾轉(zhuǎn)相除法),其核心代碼如下:

基于C語言的IDEA加密算法

4、解密密鑰擴展算法

同加密密鑰一樣,解密密鑰也需要進行擴展,與加密密鑰擴展不同的是,IDEA的解密密鑰擴展數(shù)組不需要從密鑰串變換而來,那么怎樣得到解密密鑰擴展數(shù)組呢?其解密密鑰擴展數(shù)組m_nKey - DecryptBox[ 52]是由加密密鑰擴展數(shù)組m_nKeyEncryptBox處理而來,其處理步驟為:

首先由m_nKeyEncryptBox[0]- mnKeyEnc - ryptBox[3]四個解密密鑰數(shù)組元素處理成四個解密密鑰數(shù)組元素m_nKeyDeclyptBox[ 51] -m_nKeyDecryptBox [48],然后進行8輪迭代,在第m輪迭代中由六個加密密鑰數(shù)組元素m_nKeyEncryptBox[4 +6*m] -m_nKeyEncryptBox[9+6*in]生成六個解密密鑰數(shù)組元素m_nKeyDecryptBox[47 -6 * m] - m_nKeyDecryptBox[42 -6 *m]。最終生成832比特的解密密鑰數(shù)組m_nKeyEncryptBox[52],核心代碼如下:

基于C語言的IDEA加密算法

5.IDEA加密算法和解密算法

IDEA加密算法和解密算法相同,其處理為,將64比特輸入分為4個16比特的子塊A、B、C、D,然后進行8輪循環(huán),在第j輪循環(huán)中,子密鑰為key[6*i]- key[6*i+5],其中i=0..7,其具體處理步驟不再贅述,其核心代碼如下:

基于C語言的IDEA加密算法

6、算法中幾點注意事項

(1)本程序分別在Windows 2000 Professional操作系統(tǒng),Intel PIV CPU, Microsoft Visual Studio. NET 2003 V1.1.4322和Windows Server 2003 professional操作系統(tǒng),InteIPIV CPU,Mi-
crosoft Visual Studio.NET 2005 V2.0.50727下調(diào)試通過。

(2)程序中均使用Unicode字符集,在明文和密文輸入框中需要輸入8個ASCII字符。

(3)基于Intel CPU低位在前,高位在后的特點,在進行由字節(jié)Bbyte到Unicode的轉(zhuǎn)換中均取偶數(shù)位。

(4)在進行字符變換中,有可能存在某byte值為\O,使得在由byte到Unicode的轉(zhuǎn)換中,輸出的Unicode值為\O,從而無法正常顯示8個Unicode字符。

小知識之.NET框架

.NET框架(.NET Framework) 是由微軟開發(fā),一個致力于敏捷軟件開發(fā)(Agile softwaredevelopment)、快速應用開發(fā)(Rapidapplication development)、平臺無關性和網(wǎng)絡透明化的軟件開發(fā)平臺。.NET是微軟為下一個十年對服務器和桌面型軟件工程邁出的第一步。.NET包含許多有助于互聯(lián)網(wǎng)和內(nèi)部網(wǎng)應用迅捷開發(fā)的技術。