混合加密算法之Huffman和S―DES

在對(duì)比現(xiàn)有的加密軟件和古典密碼學(xué)常見(jiàn)的加密算法后,我們結(jié)合文本加密的現(xiàn)狀及發(fā)展趨勢(shì),將基于動(dòng)態(tài)Huffman編碼和S-DES算法相結(jié)合,彌補(bǔ)兩者的缺點(diǎn),達(dá)到對(duì)文本信息的最佳加密及解密效果。

一、Huffman和S-DES混合加密算法與現(xiàn)有及傳統(tǒng)加密算法的比較

文本加密技術(shù)是保障信息安全最基本、最核心的技術(shù)措施,主要通過(guò)對(duì)數(shù)據(jù)的加密和數(shù)字簽名來(lái)實(shí)現(xiàn)。其中對(duì)數(shù)據(jù)的加密處理主要是為了防止數(shù)據(jù)不會(huì)被竊聽(tīng)。數(shù)據(jù)的加密方式有兩種,一種是傳統(tǒng)的對(duì)稱(chēng)密鑰加密,就是加密方用一把密鑰對(duì)數(shù)據(jù)進(jìn)行加密,而解密方用同樣一把密鑰對(duì)數(shù)據(jù)進(jìn)行解密。第二種是非對(duì)稱(chēng)密鑰加密,如果使用這種算法,可以保證對(duì)發(fā)送方和接收方身份的確認(rèn)。而數(shù)字簽名實(shí)際上是由生成摘要和生成數(shù)字簽名兩部分構(gòu)成。其中摘要可以防止文件被篡改,保證信息的完整性;而數(shù)字簽名則是為了保障在商務(wù)活動(dòng)中數(shù)據(jù)的不可否認(rèn)性,從而使數(shù)據(jù)具有法律意義。

目前在文檔安全管理市場(chǎng)上,加密可分為:文檔格式轉(zhuǎn)換加解密、核心層加解密、應(yīng)用層加解密。常見(jiàn)的加密軟件有:1)記事本加密器Ncrypt TX,它預(yù)設(shè)了多種加密算法,包括DES、3DES、Rijndael、Polyalphabetic、ROT13、Vigenrre、Playfair等。當(dāng)然不同的加密算法支持不同的數(shù)據(jù)編碼格式,如Hex、Base64、Text、Word等。在工具欄中也可以相應(yīng)地設(shè)置所需的密碼。2)超級(jí)密碼本Super Code有兩個(gè)特色:第一是多重加密功能;第二是密碼自動(dòng)生成,通過(guò)創(chuàng)建密鑰文件,擺脫記憶密碼的煩惱。Super Code內(nèi)置了TripleDES、DES、Rijndael、RC2等加密算法。Super Code的特點(diǎn)是允許你以上述加密算法為依據(jù),自由組合,創(chuàng)建自己獨(dú)有的加密算法序列,例如可以選擇兩種TripleDES算法,一種DES算法,三種RC2算法,五種Rijndael算法,而且可以靈活排列其先后順序。

對(duì)稱(chēng)密鑰密碼系統(tǒng),歷史悠久,加/解密速度快是其優(yōu)點(diǎn),但因加密密鑰與解密密鑰為同一把密鑰,信息的傳送方如何在加密之后,將密鑰以安全的方式傳送給接收方,如何使雙方能共享該密鑰,是此密碼系統(tǒng)的一大問(wèn)題,因此,對(duì)稱(chēng)密鑰密碼系統(tǒng)不適合多人使用的應(yīng)用。

非對(duì)稱(chēng)式加密就是加密和解密使用的不是同一個(gè)密鑰,通常有兩個(gè)密鑰,稱(chēng)為“公鑰”和“私鑰”,它們必須配對(duì)使用,否則不能打開(kāi)加密文件?!肮€”是指可以對(duì)外公布的“私鑰”則只能由持有人知道。它的優(yōu)越性在于,對(duì)稱(chēng)式的加密方法如果是在網(wǎng)絡(luò)上傳輸加密文件就很難把密鑰告訴對(duì)方,不管用什么方法都有可能被別人竊聽(tīng)到,而非對(duì)稱(chēng)式加密方法有兩個(gè)密鑰,“公鑰”可以公開(kāi),收件人解密時(shí)只要用自己的私鑰即可,這樣就很好地避免了密鑰的傳輸安全性問(wèn)題。

非對(duì)稱(chēng)式密碼系統(tǒng)也稱(chēng)為“公開(kāi)密鑰密碼系統(tǒng)”,它彌補(bǔ)了對(duì)稱(chēng)密鑰密碼系統(tǒng)的缺點(diǎn),但運(yùn)算速度較慢是公開(kāi)密鑰密碼系統(tǒng)的缺點(diǎn)。

DES算法運(yùn)算速度較慢,但在此基礎(chǔ)上改進(jìn)的S-DES算法,是一個(gè)對(duì)稱(chēng)分組加密的簡(jiǎn)化模型,有利于研究和實(shí)現(xiàn),再結(jié)合Huffman編碼對(duì)文本信息進(jìn)行壓縮編碼,即Huffman編碼和S-DES算法相結(jié)合的混和加密算法就應(yīng)運(yùn)而生了。

二、Huffman和S-DES加密算法原理分析

1、Huffman編碼原理分析

哈夫曼編碼是一種變長(zhǎng)編碼,是哈夫曼樹(shù)的一個(gè)應(yīng)用。哈夫曼樹(shù)又稱(chēng)最優(yōu)二叉樹(shù),是一種帶權(quán)路徑長(zhǎng)度最短的二叉樹(shù)。

哈夫曼編碼根據(jù)字符出現(xiàn)的概率來(lái)構(gòu)造平均長(zhǎng)度最短的編碼。在編碼中,若各碼字長(zhǎng)度嚴(yán)格按照碼字所對(duì)應(yīng)符號(hào)出現(xiàn)概率的大小的逆序排序,則編碼的平均長(zhǎng)度是最小的。其中,碼字是明文字符,是通過(guò)哈夫曼編碼后得到的編碼,其長(zhǎng)度由明文中字符出現(xiàn)的概率決定,出現(xiàn)概率大的編碼長(zhǎng)度短,出現(xiàn)概率小的編碼長(zhǎng)度長(zhǎng)。哈夫曼編碼對(duì)需要編碼的數(shù)據(jù)進(jìn)行兩遍掃描:第一遍統(tǒng)計(jì)原數(shù)據(jù)中各字符出現(xiàn)的頻率,利用得到的頻率值創(chuàng)建哈夫曼樹(shù),并把樹(shù)的信息保存起來(lái),以便解壓時(shí)創(chuàng)建同樣的哈夫曼樹(shù)進(jìn)行解壓;第二遍則根據(jù)第一遍掃描得到的哈夫曼樹(shù)進(jìn)行編碼,并把編碼后得到的碼字存儲(chǔ)起來(lái)。

哈夫曼編碼的缺點(diǎn):一、對(duì)于過(guò)短的文件進(jìn)行編碼的意義不大,因?yàn)榇鎯?chǔ)哈夫曼樹(shù)的信息就需要較大的存儲(chǔ)空間;二、存儲(chǔ)編碼信息時(shí),編碼速度慢,效率低下。

2、S-DES算法分析

S-DES加密算法是以8位明文和10位密鑰作為輸出。其解密算法用同一密鑰對(duì)8位密文分組產(chǎn)生原來(lái)的明文分組,如圖1所示,它描述了S-DES的算法流程。

解密算法的數(shù)學(xué)表示:明文=IP-I (fkl (SW (fk2 (IP(密文)))))

S-DES加密算法涉及五個(gè)函數(shù)

1)初始置換IP (initial permutation),IP=<d:\2013年學(xué)術(shù)和海外\飛翔導(dǎo)入圖片目錄17\鄭靜Huffman和S-DES混合加密算法的研究14Yo-FBOO\image2. png>,將8bit數(shù)按照IP函數(shù)進(jìn)行移位;

2)復(fù)雜函數(shù)fkl,它是依賴(lài)于子密鑰,包含置換和替換的運(yùn)算;

3)置換函數(shù)sw,將8bit數(shù)的左4bit和右4bit交換位置;

4)復(fù)雜函數(shù)fk2,它是依賴(lài)于子密鑰K2,包含置換和替換的運(yùn)算;

5)初始置換IP的逆置換IP-I,IP-I=<d:\2013年學(xué)術(shù)和海外\飛翔導(dǎo)入圖片目錄17\鄭靜Huffman和S-DES混合加密算法的研究14Yo-FBOO\image3. png>,將8bit數(shù)按照IP-I函數(shù)進(jìn)行移位。

三、Huffman和S-DES算法混合加/解密過(guò)程

1、混合加密過(guò)程

用數(shù)據(jù)流方式讀入將要加密的文本文件信息,輸入密鑰并保存,經(jīng)過(guò)一次哈夫曼編碼加密后轉(zhuǎn)化為0/1字符串,在進(jìn)行第二次加密之前要將0/1字符串分組,每8位一組,將其作為第二次加密S-DES算法的明文輸入,經(jīng)過(guò)S-DES算法得到最終的密文,將其保存到另一個(gè)TXT文本文件中?;旌纤惴ǖ募用苓^(guò)程如圖2所示。

2、混合解密過(guò)程

解密過(guò)程首先要進(jìn)行身份認(rèn)證,輸入密鑰,身份認(rèn)證成功后將進(jìn)行解密,否則將不會(huì)解密。首先將最終的密文進(jìn)行分組,每8位一組,經(jīng)過(guò)S-DES算法進(jìn)行第一次解密,得到O/1字符串,將其作為Huffman算法的編碼進(jìn)行第二次解密,即可得到最終的明文。其混合算法的解密過(guò)程如圖3所示。

四、Huffman和S-DES混合算法的實(shí)現(xiàn)

1、Huffman編碼的實(shí)現(xiàn)

Huffman算法主要涉及到5個(gè)核心函數(shù),分別為獲取權(quán)值數(shù)組GetWeightArray,構(gòu)建哈夫曼樹(shù)Creat eHuffmanTree、創(chuàng)建哈夫曼編碼字典CreateHuffmanDict、哈夫曼編碼StringToHuffmanCode以及哈夫曼編碼的解碼ToHuffmanCode。

1)獲取權(quán)值數(shù)組GetWeightArray(string str)

將文本信息中的每種字符出現(xiàn)的次數(shù)進(jìn)行統(tǒng)計(jì),并將其作為哈夫曼樹(shù)的權(quán)值。

2)構(gòu)建哈夫曼樹(shù)CreateHuffmanTree (Node[] sources)

按“左走0,右走1”的原則創(chuàng)建哈夫曼樹(shù)。

3)創(chuàng)建哈夫曼編碼字典CreateHuffmanDict (Node hTree)

創(chuàng)建哈夫曼編碼字典,在數(shù)組中實(shí)現(xiàn)“左走0,右走1”。

4)哈夫曼編碼StringToHuffmanCode (out Dictionary<char, string> key, stringstr)

由創(chuàng)建的哈夫曼樹(shù),得到哈夫曼編碼。

5)哈夫曼編碼的解碼ToHuffmanCode(string source, Dictionary<char, string>hfdict)

將哈夫曼編碼還原成哈且血L 0每個(gè)字符出現(xiàn)的次數(shù),將其還原成原文本信息。

2、S-DES算法的實(shí)現(xiàn)

S-DES算法中涉及的核心算法為P10置換;P8置換;IP函數(shù);FK函數(shù);sw函數(shù);IP-I函數(shù)。

1) P10置換 pl0(( string miyao)

numbers = miyao. ToCharArray ();

miyao = “.. ;

miyao = miyao + numbers[2] + numbers [4] + numbers[l] + numbers [6] ++ numbers [9] + numbers[0] + numbers [8] + numbers [7] + numbers [5];

2) P8置換p8 (string lsl, string ls2)

miyao = miyao + numbersl[2] + numbersl[3] + numbersl[4] + ls2

miyao = miyao + numbers[3] + numbers[0] + numbers [4] + numbers[l] +numbers [3]numbers [5]+ numbers [2] + numbers[7] + numbers [6] ;

3) IP函數(shù) IP (string mingwen)

mingwen = mingwen + numbers [1] + numbers [5] + numbers [2] + numbers [0] + numbers [3]+ numbers [7] + numbers [4] + numbers [6] ;

4) FK函數(shù) fk (string mingwen, tringkey)

int[, ]s0=new int[, ]({1, 0, 3, 2), {3, 2, 1, 0), {0, 2, 1, 3), {3, 1, 3, 2) };

int[, ]s1=new int[, ]({0, 1, 2, 3), {2, 0, 1, 3), {3, O, 1,O), {2, 1, 0, 3)};

varstr = Convert. ToString(Convert. ToInt32(lstr, 2) - Convert. ToInt32(varstr,2), 2) + rstr;

while (varstr. Length < 8) varstr = '0' + varstr;

5) SW函數(shù) sw (string mingwen)

mingwen = mingwen + numbers [4] + numbers [5] + numbers [6] + numbers [7] + numbers [0]+ numbers [1] + numbers [2] + numbers [3] ;

6) IP-I函數(shù)NIP (string mingwen)

mingwen = mingwen + numbers [3] + numbers [0] + numbers [2] + numbers [4] + numbers [6]+ numbers [1] + numbers [7] + numbers [5] ;

小知識(shí)之Huffman

哈夫曼編碼(Huffman Coding)是一種編碼方式,哈夫曼編碼是可變字長(zhǎng)編碼(VLC)的一種。Huffman于1952年提出一種編碼方法,該方法完全依據(jù)字符出現(xiàn)概率來(lái)構(gòu)造異字頭的平均長(zhǎng)度最短的碼字,有時(shí)稱(chēng)之為最佳編碼,一般就叫做Huffman編碼(有時(shí)也稱(chēng)為霍夫曼編碼)。