国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

常見密碼算法分析及C語言實(shí)現(xiàn)

2014-12-31 00:37郭萌萌
電腦知識與技術(shù) 2014年35期
關(guān)鍵詞:C語言

郭萌萌

摘要:計算機(jī)的高速發(fā)展使信息安全面臨著巨大的挑戰(zhàn)。在計算機(jī)應(yīng)用中要想確保信息安全,就必須要對密碼算法進(jìn)行合理應(yīng)用。基于此,該文對密碼算法進(jìn)行了分析,并將密碼算法的C語言實(shí)現(xiàn)進(jìn)行了簡單介紹和說明。

關(guān)鍵詞:密碼算法;C語言;隨機(jī)數(shù)

中圖分類號:TP311 文獻(xiàn)標(biāo)識碼:A 文章編號:1009-3044(2014)35-8371-02

密碼學(xué)具有悠久的歷史,但同時也是一門嶄新的課程,人們從來沒有停止對密碼學(xué)的研究?,F(xiàn)代密碼學(xué)理論十分復(fù)雜,現(xiàn)代密碼學(xué)的發(fā)展需要現(xiàn)代數(shù)學(xué)和計計算機(jī)科學(xué)的支持。進(jìn)入二十一世紀(jì)后,人們已經(jīng)計入到了計算機(jī)時代,如何確保計算機(jī)中的信息在存儲、傳輸、交換中的安全性是一個值得探討的話題。

1 計算機(jī)密碼學(xué)發(fā)展歷史

密碼學(xué)在人類發(fā)展歷史中有著不可代替的作用,從2000多年前古埃及發(fā)生戰(zhàn)爭,密碼就出現(xiàn)在了人類中,起初的密碼就是簡單的記錄符號。隨著時代的推移,在兩次世界大戰(zhàn)中人們開始意識到密碼的重要性。

密碼學(xué)真正成為一門學(xué)科是在二十世紀(jì)七十年代。美國國家標(biāo)準(zhǔn)局在1977年對DES(數(shù)據(jù)加密標(biāo)準(zhǔn))進(jìn)行了公布,并批準(zhǔn)在非商業(yè)和非機(jī)密單位中對其進(jìn)行應(yīng)用,從此解開了密碼的神秘面紗。早在1975年“密碼學(xué)的新方向”一文中就提出了適用于網(wǎng)絡(luò)的公鑰密碼理念,這也是人們對公鑰密碼進(jìn)行研究的開始。受“密碼學(xué)的新方向”影響,各種公鑰密碼體制被提了出來,在眾多體制中,RSA成為了密碼學(xué)研究的一個里程碑。不夸張的說,“沒有公鑰密碼的研究也不會有近代密碼學(xué)”?,F(xiàn)代社會是一個信息高速發(fā)展的社會,隨著科技的發(fā)展,密碼學(xué)也取得了巨大進(jìn)步,而且也成為了許多學(xué)科發(fā)展的基礎(chǔ)。

2 常見的密碼算法

2.1 密碼系統(tǒng)保密機(jī)理

計算機(jī)及互聯(lián)網(wǎng)在人們的日常生活中越來越普及,隨之而來的,人們對信息安全方面的要求也越來越高。在網(wǎng)絡(luò)環(huán)境中確保信息完整性、準(zhǔn)確性和機(jī)密性都需要密碼技術(shù)來實(shí)現(xiàn)。圖1為密碼系統(tǒng)保密機(jī)理。

在圖1中key1表示的是加密密鑰,key2表示的是解密密鑰,密鑰系統(tǒng)依據(jù)key1與key2是否相同,將密碼算法分為對稱密碼算法和非對稱密碼算法。非對稱密碼算法在應(yīng)用過程中既要使用公鑰也要使用私鑰。圖1中的EK1(M)和DK2(C)就是在加密和解密過程中使用的密碼算法。

密碼技術(shù)是密碼算法的核心,算法主要通過軟件實(shí)現(xiàn),少數(shù)算法可以通過硬件完成,軟件實(shí)現(xiàn)算法的主要優(yōu)勢在于可優(yōu)化和可維護(hù),因此在編寫上通常使用C語言。

2.2 對稱密碼算法

KP與KS在實(shí)質(zhì)上是相同的,也就是說可以由KP導(dǎo)出KS。從加密模式上對對稱加密模式進(jìn)行分類,可以將其分為分組密碼和序列密碼兩大類。在對稱加密系統(tǒng)中,加密和解密過程中使用的密鑰都是相同的,因為加密和解密需要使用相同的密鑰,因此加密方和解密方都需要對他們使用的密鑰進(jìn)行保存,同時加密和解密方都需要嚴(yán)格的保存密鑰,避免泄露,也只有這樣才能實(shí)現(xiàn)密碼的完整性和機(jī)密性[1]。

2.3 非對稱密碼算法

非對稱密碼算法也叫做雙鑰密碼算法,在此算法中KP同KS之間有著很大差別,KP是公開密鑰,也叫公鑰,KS則是必須需要保密的密鑰,也叫私鑰。在公鑰密碼算法中可以較容易的由KS推導(dǎo)出KP,但很難實(shí)現(xiàn)反向推導(dǎo),這種單向性的實(shí)現(xiàn),主要是具有單向函數(shù),其中單向函數(shù)滿足以下條件:1) 指定x值,很容易完成y=kk(x)的計算;2) 指定y,對x進(jìn)行計算,使x=f-1k(y)無法實(shí)現(xiàn)。3) 存在數(shù)值k,如果k為已知,給出任意一個y,如果存在相應(yīng)的x,則很容易完成x=f-1k(y)的計算[2]。

2.4 兩種算法的對比

對稱密碼與非對稱密碼算在實(shí)際應(yīng)用中各有各的特點(diǎn),將兩者進(jìn)行對比,優(yōu)缺點(diǎn)如表1所示。從目前的應(yīng)用情況來看,對稱密碼經(jīng)常被應(yīng)用在大量數(shù)據(jù)的加密。非對稱密碼經(jīng)常應(yīng)用在關(guān)鍵性數(shù)據(jù)加密。例如會話密鑰。

3 常見密碼算法分析

3.1常見的對稱密碼算法

IBM公司首先開發(fā)了DES算法,并在1977年被美國采納,作為“非密級”使用標(biāo)準(zhǔn),并且被廣泛應(yīng)用到生產(chǎn)中, DES曾經(jīng)是世界上應(yīng)用最為廣泛的密鑰算法。在對DES算法進(jìn)行應(yīng)用時,將明文分成塊,運(yùn)用8個S盒與8個P盒進(jìn)行置換,在16輪迭代后,生成比特密文(64bit),在每一輪的迭代中運(yùn)用的密鑰都是由最初的56比特生成的[3]。在加密和解密過程中采用DES加密和解密,那么加密和解密流程以及密鑰都完全相同,其中僅有的區(qū)別就是解密與加密中應(yīng)用的子密鑰序列是相反的。DES算法主要存在以下問題:1) DES密鑰空間無法滿足實(shí)際需求(256bit)。2) DES里刨除S盒其余計算都是線性的,然而在實(shí)際應(yīng)用中,S盒的密碼算法對安全性影響巨大,而NIST(美國國家標(biāo)準(zhǔn)局)并沒有將S盒設(shè)計原則公布于眾,因此,并不排除S盒中藏有“陷門”,同時因為空間問題DES密鑰的組合形式有限,在被攻擊時,如果攻擊人員采用窮舉法很可能在短時間內(nèi)獲取成功。因此在實(shí)際應(yīng)用中,為了使DES算法安全性能夠得到增加,從事密碼設(shè)計的工作中雖然又提出了獨(dú)立密鑰方法、基于DES的Triple算法,但在應(yīng)用中起到的效果并不明顯[4]。

在對稱密碼算法中IDEA算法是由我國學(xué)者萊學(xué)嘉和美國著名密碼專家James L.Massey共同提出的,在IDEA數(shù)據(jù)加密算法中密文和明文都是64比特,但密鑰長度則為128比特。IDEA算法需要建立在群運(yùn)算的基礎(chǔ)之上對密鑰和數(shù)據(jù)進(jìn)行運(yùn)算,最后得到解密結(jié)果或密文輸出。

IDEA算法品質(zhì)優(yōu)良,2128比特的密鑰空間對其安全性予以了有利的支持,而且無論在硬件上還是在軟件上都可以較快的實(shí)現(xiàn)。從本質(zhì)上來看,IDEA算法算是一種“強(qiáng)”加算法,從目前情況來看,還沒有出現(xiàn)對其產(chǎn)生有效供給的算法。endprint

3.2非對稱加密算法

RSA與上述的DES算法最大的區(qū)別就是它的密鑰算法被相對完整的公開,在加密過程中使用的加密密鑰并不是私密的,在必要時可以通過廣播或網(wǎng)絡(luò)的形式對密鑰進(jìn)行公布,這也就是在加密過程中使用的公鑰。在解密過程中應(yīng)用的密鑰則具有私密性,也就是我們常說的私鑰。RSA的安全性基于大整數(shù)素因子分解的困難性,大數(shù)因子分解在數(shù)學(xué)界一直都是一道難題,到目前還沒有人發(fā)現(xiàn)合理的解決方法。目前在最快的算法就是參數(shù)對照,然而完成1024比特的一個整數(shù)因子分解所需要的時間是巨大的。RSA在應(yīng)用過程中不僅能夠用于加密,而且也能用于認(rèn)證和數(shù)字簽名和密鑰發(fā)布[5]。

3.3 ECC算法

ECC算法早在1985年就被提出,是非對稱密碼算法的一種。其安全性主要源于橢圓曲線離散對數(shù)問題求解難度大。建設(shè)Q是W(JR)(橢圓曲線)上的一點(diǎn),點(diǎn)F是W(JR)上為Q倍數(shù)點(diǎn),則存在整數(shù)Y大于0,使F與YF相等,橢圓曲線離散問題就是由給出的Q和F來確定出Y的值。依據(jù)目前的研究結(jié)果來看,對橢圓曲線上的離散對數(shù)問題處理要比離散對數(shù)處理難度更大,也就是說在橢圓曲線公鑰密碼上運(yùn)用較小的數(shù)就可以實(shí)現(xiàn)同大區(qū)域相同的安全性。

4 密碼算法的C語言實(shí)現(xiàn)

4.1 數(shù)據(jù)與邏輯運(yùn)算

在DES算法中,多數(shù)為邏輯運(yùn)算,密鑰和明文都需要依照按ASCII碼標(biāo)準(zhǔn)統(tǒng)一轉(zhuǎn)化為十進(jìn)制碼,然后再進(jìn)行密鑰置換和IP置換,明文在完成置換后,要進(jìn)行非線性置換,在DES算法中涉及到的置換都應(yīng)當(dāng)為按位邏輯運(yùn)算。運(yùn)算過程中的數(shù)據(jù)類型十分重要。

4.2 隨機(jī)最大數(shù)的生成

無論是使用什么密碼算法,在應(yīng)用中隨機(jī)最大數(shù)都是不可或缺的。一般來說一個能夠被應(yīng)用的密碼隨機(jī)數(shù)發(fā)生器應(yīng)當(dāng)具有以下特性:1) 產(chǎn)生的數(shù)值應(yīng)當(dāng)是無法預(yù)測的。2) 產(chǎn)生的數(shù)應(yīng)當(dāng)平均分布。3) 擁有一個大范圍的取值范圍,也就是在使用中能夠獲取到不同的數(shù)值。rand()函數(shù)經(jīng)常用于C語言中隨機(jī)函數(shù)的生成,但如果對信息的安全要求較高則不建議使用rand()函數(shù)。這主要是因為rand()具有一定的可預(yù)測性,rand()函數(shù)是以之前產(chǎn)生的隨機(jī)數(shù)作為種子,然后再生成下一個隨機(jī)數(shù)。

正確的做法是在系統(tǒng)中選取一個高級的函數(shù)方法CryptGenRandom,該方法具有平均分布和不可預(yù)測的特點(diǎn),此函數(shù)已經(jīng)在Winerypt.h中進(jìn)行了聲明,因此可使用于任意Windows平臺。但在對該方法進(jìn)行調(diào)用時需要C++中的CCrypRandom類的支持,CryptGenRandom主要從Windows系統(tǒng)中獲取以下隨機(jī)資源:當(dāng)前進(jìn)程、時鐘數(shù)、內(nèi)部CPU計數(shù)器、當(dāng)前時間等。

4.3 大數(shù)運(yùn)算

RSA加密需要有大數(shù)運(yùn)算予以支持,目前主流RSA算法需要512位以上作為支持,而從目前情況來看,多數(shù)計算機(jī)中使用的編譯器,僅支持64位,因此無法滿足RSA加密的使用需求,為了解決這一問題則需要建立大數(shù)運(yùn)算數(shù)據(jù)庫,數(shù)據(jù)庫中應(yīng)當(dāng)包含加、減、乘、除等。

大數(shù)表示一種思想:用數(shù)學(xué)完成對數(shù)據(jù)的存儲,也就是利用10進(jìn)制數(shù)對數(shù)組加以表示,然后函數(shù)進(jìn)行編寫,這樣做的最大優(yōu)點(diǎn)是符合人們長期以來養(yǎng)成的思維習(xí)慣,便于人們對其進(jìn)行理解;主要弊端是效率低,而且在處理過程中需要優(yōu)化,而且對該思想進(jìn)行運(yùn)算需要許多額外空間。另一種思路是將大數(shù)當(dāng)作一個二進(jìn)制流進(jìn)行處理,使用各種移位和邏輯操作來進(jìn)行加減乘除運(yùn)算,這樣做的最大弊端是代碼的可讀性差、調(diào)試難度大。

4.4 C語言代碼的實(shí)現(xiàn)

以求模為例,算法流程如下:

int mod(int* arrayA, int* arrayB,int arrayA_Length,int arrayB_Length)

{if(arrayA_Length

{for(i=arrayA_Length-l ;i >=0;i—)

{modend[i]=a[i];

}return arrayA_Length;

}

else

{for(i=arrayB_Length;i < arrayA_Length;i++)

{arrayC[j]=arrayA[i]; j=j+1;

}

arrayC_Length = multiply(arrayC,arrayB);

sub(arrayA,arrayC,arrayB,arrayA_Length,arrayC_Length,arrayB_Length);

while(arrayA_Length>arrayB_Length)

{sub(arrayA,arrayB,arrayA_Length,arrayB_Length);

}

for(i=arrayA_Length-l ;i >=0;i—)

{modend[i]=a[i];

}

return arrayA_Length;

}}

5 結(jié)束語

現(xiàn)代社會是信息社會,計算機(jī)技術(shù)、網(wǎng)絡(luò)技術(shù)發(fā)迅速,信息安全已經(jīng)成為當(dāng)今社會的熱點(diǎn)話題。尤其是網(wǎng)絡(luò)信息安全已經(jīng)成為了信息安全領(lǐng)域亟待解決的問題。使用密碼算法是保證網(wǎng)絡(luò)信息安全的一個重要手段。計算機(jī)密碼學(xué)在解決信息安全上有無可代替的作用,而伴隨著計算技術(shù)被應(yīng)用到社會的各個領(lǐng)域,密碼技術(shù)的應(yīng)用領(lǐng)域也得到了進(jìn)一步擴(kuò)大,因此在日后的研究過程中要加強(qiáng)對密碼學(xué)的研究,使其能夠更好的為人類服務(wù)。

參考文獻(xiàn):

[1] 胡小敏.密碼算法專用描述語言多項式和大數(shù)運(yùn)算的設(shè)計與實(shí)現(xiàn)[D].陜西:西安電子科技大學(xué),2012.

[2] 陳曼.分組密碼算法能量與錯誤分析攻擊及其防御對策研究 [D].山東:山東大學(xué),2013.

[3] 張曉新,仲叢久.基于C語言實(shí)現(xiàn)的數(shù)據(jù)加密DES算法[J].沈陽航空工業(yè)學(xué)院學(xué)報,2004,21(2):48-49.

[4] 張文質(zhì),郝鵬翼.Huffman編碼和解碼的C語言實(shí)現(xiàn)[J].洛陽大學(xué)學(xué)報,2005,4(12):37-41.

[5] 林德敬,林柏鋼.三大密碼體制:對稱密碼、公鑰密碼和量子密碼的理論與技術(shù)[J].電訊技術(shù),2003,3:6-12.

3.2非對稱加密算法

RSA與上述的DES算法最大的區(qū)別就是它的密鑰算法被相對完整的公開,在加密過程中使用的加密密鑰并不是私密的,在必要時可以通過廣播或網(wǎng)絡(luò)的形式對密鑰進(jìn)行公布,這也就是在加密過程中使用的公鑰。在解密過程中應(yīng)用的密鑰則具有私密性,也就是我們常說的私鑰。RSA的安全性基于大整數(shù)素因子分解的困難性,大數(shù)因子分解在數(shù)學(xué)界一直都是一道難題,到目前還沒有人發(fā)現(xiàn)合理的解決方法。目前在最快的算法就是參數(shù)對照,然而完成1024比特的一個整數(shù)因子分解所需要的時間是巨大的。RSA在應(yīng)用過程中不僅能夠用于加密,而且也能用于認(rèn)證和數(shù)字簽名和密鑰發(fā)布[5]。

3.3 ECC算法

ECC算法早在1985年就被提出,是非對稱密碼算法的一種。其安全性主要源于橢圓曲線離散對數(shù)問題求解難度大。建設(shè)Q是W(JR)(橢圓曲線)上的一點(diǎn),點(diǎn)F是W(JR)上為Q倍數(shù)點(diǎn),則存在整數(shù)Y大于0,使F與YF相等,橢圓曲線離散問題就是由給出的Q和F來確定出Y的值。依據(jù)目前的研究結(jié)果來看,對橢圓曲線上的離散對數(shù)問題處理要比離散對數(shù)處理難度更大,也就是說在橢圓曲線公鑰密碼上運(yùn)用較小的數(shù)就可以實(shí)現(xiàn)同大區(qū)域相同的安全性。

4 密碼算法的C語言實(shí)現(xiàn)

4.1 數(shù)據(jù)與邏輯運(yùn)算

在DES算法中,多數(shù)為邏輯運(yùn)算,密鑰和明文都需要依照按ASCII碼標(biāo)準(zhǔn)統(tǒng)一轉(zhuǎn)化為十進(jìn)制碼,然后再進(jìn)行密鑰置換和IP置換,明文在完成置換后,要進(jìn)行非線性置換,在DES算法中涉及到的置換都應(yīng)當(dāng)為按位邏輯運(yùn)算。運(yùn)算過程中的數(shù)據(jù)類型十分重要。

4.2 隨機(jī)最大數(shù)的生成

無論是使用什么密碼算法,在應(yīng)用中隨機(jī)最大數(shù)都是不可或缺的。一般來說一個能夠被應(yīng)用的密碼隨機(jī)數(shù)發(fā)生器應(yīng)當(dāng)具有以下特性:1) 產(chǎn)生的數(shù)值應(yīng)當(dāng)是無法預(yù)測的。2) 產(chǎn)生的數(shù)應(yīng)當(dāng)平均分布。3) 擁有一個大范圍的取值范圍,也就是在使用中能夠獲取到不同的數(shù)值。rand()函數(shù)經(jīng)常用于C語言中隨機(jī)函數(shù)的生成,但如果對信息的安全要求較高則不建議使用rand()函數(shù)。這主要是因為rand()具有一定的可預(yù)測性,rand()函數(shù)是以之前產(chǎn)生的隨機(jī)數(shù)作為種子,然后再生成下一個隨機(jī)數(shù)。

正確的做法是在系統(tǒng)中選取一個高級的函數(shù)方法CryptGenRandom,該方法具有平均分布和不可預(yù)測的特點(diǎn),此函數(shù)已經(jīng)在Winerypt.h中進(jìn)行了聲明,因此可使用于任意Windows平臺。但在對該方法進(jìn)行調(diào)用時需要C++中的CCrypRandom類的支持,CryptGenRandom主要從Windows系統(tǒng)中獲取以下隨機(jī)資源:當(dāng)前進(jìn)程、時鐘數(shù)、內(nèi)部CPU計數(shù)器、當(dāng)前時間等。

4.3 大數(shù)運(yùn)算

RSA加密需要有大數(shù)運(yùn)算予以支持,目前主流RSA算法需要512位以上作為支持,而從目前情況來看,多數(shù)計算機(jī)中使用的編譯器,僅支持64位,因此無法滿足RSA加密的使用需求,為了解決這一問題則需要建立大數(shù)運(yùn)算數(shù)據(jù)庫,數(shù)據(jù)庫中應(yīng)當(dāng)包含加、減、乘、除等。

大數(shù)表示一種思想:用數(shù)學(xué)完成對數(shù)據(jù)的存儲,也就是利用10進(jìn)制數(shù)對數(shù)組加以表示,然后函數(shù)進(jìn)行編寫,這樣做的最大優(yōu)點(diǎn)是符合人們長期以來養(yǎng)成的思維習(xí)慣,便于人們對其進(jìn)行理解;主要弊端是效率低,而且在處理過程中需要優(yōu)化,而且對該思想進(jìn)行運(yùn)算需要許多額外空間。另一種思路是將大數(shù)當(dāng)作一個二進(jìn)制流進(jìn)行處理,使用各種移位和邏輯操作來進(jìn)行加減乘除運(yùn)算,這樣做的最大弊端是代碼的可讀性差、調(diào)試難度大。

4.4 C語言代碼的實(shí)現(xiàn)

以求模為例,算法流程如下:

int mod(int* arrayA, int* arrayB,int arrayA_Length,int arrayB_Length)

{if(arrayA_Length

{for(i=arrayA_Length-l ;i >=0;i—)

{modend[i]=a[i];

}return arrayA_Length;

}

else

{for(i=arrayB_Length;i < arrayA_Length;i++)

{arrayC[j]=arrayA[i]; j=j+1;

}

arrayC_Length = multiply(arrayC,arrayB);

sub(arrayA,arrayC,arrayB,arrayA_Length,arrayC_Length,arrayB_Length);

while(arrayA_Length>arrayB_Length)

{sub(arrayA,arrayB,arrayA_Length,arrayB_Length);

}

for(i=arrayA_Length-l ;i >=0;i—)

{modend[i]=a[i];

}

return arrayA_Length;

}}

5 結(jié)束語

現(xiàn)代社會是信息社會,計算機(jī)技術(shù)、網(wǎng)絡(luò)技術(shù)發(fā)迅速,信息安全已經(jīng)成為當(dāng)今社會的熱點(diǎn)話題。尤其是網(wǎng)絡(luò)信息安全已經(jīng)成為了信息安全領(lǐng)域亟待解決的問題。使用密碼算法是保證網(wǎng)絡(luò)信息安全的一個重要手段。計算機(jī)密碼學(xué)在解決信息安全上有無可代替的作用,而伴隨著計算技術(shù)被應(yīng)用到社會的各個領(lǐng)域,密碼技術(shù)的應(yīng)用領(lǐng)域也得到了進(jìn)一步擴(kuò)大,因此在日后的研究過程中要加強(qiáng)對密碼學(xué)的研究,使其能夠更好的為人類服務(wù)。

參考文獻(xiàn):

[1] 胡小敏.密碼算法專用描述語言多項式和大數(shù)運(yùn)算的設(shè)計與實(shí)現(xiàn)[D].陜西:西安電子科技大學(xué),2012.

[2] 陳曼.分組密碼算法能量與錯誤分析攻擊及其防御對策研究 [D].山東:山東大學(xué),2013.

[3] 張曉新,仲叢久.基于C語言實(shí)現(xiàn)的數(shù)據(jù)加密DES算法[J].沈陽航空工業(yè)學(xué)院學(xué)報,2004,21(2):48-49.

[4] 張文質(zhì),郝鵬翼.Huffman編碼和解碼的C語言實(shí)現(xiàn)[J].洛陽大學(xué)學(xué)報,2005,4(12):37-41.

[5] 林德敬,林柏鋼.三大密碼體制:對稱密碼、公鑰密碼和量子密碼的理論與技術(shù)[J].電訊技術(shù),2003,3:6-12.

3.2非對稱加密算法

RSA與上述的DES算法最大的區(qū)別就是它的密鑰算法被相對完整的公開,在加密過程中使用的加密密鑰并不是私密的,在必要時可以通過廣播或網(wǎng)絡(luò)的形式對密鑰進(jìn)行公布,這也就是在加密過程中使用的公鑰。在解密過程中應(yīng)用的密鑰則具有私密性,也就是我們常說的私鑰。RSA的安全性基于大整數(shù)素因子分解的困難性,大數(shù)因子分解在數(shù)學(xué)界一直都是一道難題,到目前還沒有人發(fā)現(xiàn)合理的解決方法。目前在最快的算法就是參數(shù)對照,然而完成1024比特的一個整數(shù)因子分解所需要的時間是巨大的。RSA在應(yīng)用過程中不僅能夠用于加密,而且也能用于認(rèn)證和數(shù)字簽名和密鑰發(fā)布[5]。

3.3 ECC算法

ECC算法早在1985年就被提出,是非對稱密碼算法的一種。其安全性主要源于橢圓曲線離散對數(shù)問題求解難度大。建設(shè)Q是W(JR)(橢圓曲線)上的一點(diǎn),點(diǎn)F是W(JR)上為Q倍數(shù)點(diǎn),則存在整數(shù)Y大于0,使F與YF相等,橢圓曲線離散問題就是由給出的Q和F來確定出Y的值。依據(jù)目前的研究結(jié)果來看,對橢圓曲線上的離散對數(shù)問題處理要比離散對數(shù)處理難度更大,也就是說在橢圓曲線公鑰密碼上運(yùn)用較小的數(shù)就可以實(shí)現(xiàn)同大區(qū)域相同的安全性。

4 密碼算法的C語言實(shí)現(xiàn)

4.1 數(shù)據(jù)與邏輯運(yùn)算

在DES算法中,多數(shù)為邏輯運(yùn)算,密鑰和明文都需要依照按ASCII碼標(biāo)準(zhǔn)統(tǒng)一轉(zhuǎn)化為十進(jìn)制碼,然后再進(jìn)行密鑰置換和IP置換,明文在完成置換后,要進(jìn)行非線性置換,在DES算法中涉及到的置換都應(yīng)當(dāng)為按位邏輯運(yùn)算。運(yùn)算過程中的數(shù)據(jù)類型十分重要。

4.2 隨機(jī)最大數(shù)的生成

無論是使用什么密碼算法,在應(yīng)用中隨機(jī)最大數(shù)都是不可或缺的。一般來說一個能夠被應(yīng)用的密碼隨機(jī)數(shù)發(fā)生器應(yīng)當(dāng)具有以下特性:1) 產(chǎn)生的數(shù)值應(yīng)當(dāng)是無法預(yù)測的。2) 產(chǎn)生的數(shù)應(yīng)當(dāng)平均分布。3) 擁有一個大范圍的取值范圍,也就是在使用中能夠獲取到不同的數(shù)值。rand()函數(shù)經(jīng)常用于C語言中隨機(jī)函數(shù)的生成,但如果對信息的安全要求較高則不建議使用rand()函數(shù)。這主要是因為rand()具有一定的可預(yù)測性,rand()函數(shù)是以之前產(chǎn)生的隨機(jī)數(shù)作為種子,然后再生成下一個隨機(jī)數(shù)。

正確的做法是在系統(tǒng)中選取一個高級的函數(shù)方法CryptGenRandom,該方法具有平均分布和不可預(yù)測的特點(diǎn),此函數(shù)已經(jīng)在Winerypt.h中進(jìn)行了聲明,因此可使用于任意Windows平臺。但在對該方法進(jìn)行調(diào)用時需要C++中的CCrypRandom類的支持,CryptGenRandom主要從Windows系統(tǒng)中獲取以下隨機(jī)資源:當(dāng)前進(jìn)程、時鐘數(shù)、內(nèi)部CPU計數(shù)器、當(dāng)前時間等。

4.3 大數(shù)運(yùn)算

RSA加密需要有大數(shù)運(yùn)算予以支持,目前主流RSA算法需要512位以上作為支持,而從目前情況來看,多數(shù)計算機(jī)中使用的編譯器,僅支持64位,因此無法滿足RSA加密的使用需求,為了解決這一問題則需要建立大數(shù)運(yùn)算數(shù)據(jù)庫,數(shù)據(jù)庫中應(yīng)當(dāng)包含加、減、乘、除等。

大數(shù)表示一種思想:用數(shù)學(xué)完成對數(shù)據(jù)的存儲,也就是利用10進(jìn)制數(shù)對數(shù)組加以表示,然后函數(shù)進(jìn)行編寫,這樣做的最大優(yōu)點(diǎn)是符合人們長期以來養(yǎng)成的思維習(xí)慣,便于人們對其進(jìn)行理解;主要弊端是效率低,而且在處理過程中需要優(yōu)化,而且對該思想進(jìn)行運(yùn)算需要許多額外空間。另一種思路是將大數(shù)當(dāng)作一個二進(jìn)制流進(jìn)行處理,使用各種移位和邏輯操作來進(jìn)行加減乘除運(yùn)算,這樣做的最大弊端是代碼的可讀性差、調(diào)試難度大。

4.4 C語言代碼的實(shí)現(xiàn)

以求模為例,算法流程如下:

int mod(int* arrayA, int* arrayB,int arrayA_Length,int arrayB_Length)

{if(arrayA_Length

{for(i=arrayA_Length-l ;i >=0;i—)

{modend[i]=a[i];

}return arrayA_Length;

}

else

{for(i=arrayB_Length;i < arrayA_Length;i++)

{arrayC[j]=arrayA[i]; j=j+1;

}

arrayC_Length = multiply(arrayC,arrayB);

sub(arrayA,arrayC,arrayB,arrayA_Length,arrayC_Length,arrayB_Length);

while(arrayA_Length>arrayB_Length)

{sub(arrayA,arrayB,arrayA_Length,arrayB_Length);

}

for(i=arrayA_Length-l ;i >=0;i—)

{modend[i]=a[i];

}

return arrayA_Length;

}}

5 結(jié)束語

現(xiàn)代社會是信息社會,計算機(jī)技術(shù)、網(wǎng)絡(luò)技術(shù)發(fā)迅速,信息安全已經(jīng)成為當(dāng)今社會的熱點(diǎn)話題。尤其是網(wǎng)絡(luò)信息安全已經(jīng)成為了信息安全領(lǐng)域亟待解決的問題。使用密碼算法是保證網(wǎng)絡(luò)信息安全的一個重要手段。計算機(jī)密碼學(xué)在解決信息安全上有無可代替的作用,而伴隨著計算技術(shù)被應(yīng)用到社會的各個領(lǐng)域,密碼技術(shù)的應(yīng)用領(lǐng)域也得到了進(jìn)一步擴(kuò)大,因此在日后的研究過程中要加強(qiáng)對密碼學(xué)的研究,使其能夠更好的為人類服務(wù)。

參考文獻(xiàn):

[1] 胡小敏.密碼算法專用描述語言多項式和大數(shù)運(yùn)算的設(shè)計與實(shí)現(xiàn)[D].陜西:西安電子科技大學(xué),2012.

[2] 陳曼.分組密碼算法能量與錯誤分析攻擊及其防御對策研究 [D].山東:山東大學(xué),2013.

[3] 張曉新,仲叢久.基于C語言實(shí)現(xiàn)的數(shù)據(jù)加密DES算法[J].沈陽航空工業(yè)學(xué)院學(xué)報,2004,21(2):48-49.

[4] 張文質(zhì),郝鵬翼.Huffman編碼和解碼的C語言實(shí)現(xiàn)[J].洛陽大學(xué)學(xué)報,2005,4(12):37-41.

[5] 林德敬,林柏鋼.三大密碼體制:對稱密碼、公鑰密碼和量子密碼的理論與技術(shù)[J].電訊技術(shù),2003,3:6-12.

猜你喜歡
C語言
基于Visual Studio Code的C語言程序設(shè)計實(shí)踐教學(xué)探索
51單片機(jī)C語言入門方法
基于C語言的計算機(jī)軟件編程
C語言程序設(shè)計課程教學(xué)與學(xué)科專業(yè)相結(jié)合的探索
《C語言程序設(shè)計》翻轉(zhuǎn)課堂教學(xué)改革要點(diǎn)
淺談基于C語言的計算機(jī)軟件程序設(shè)計
高職高專院校C語言程序設(shè)計教學(xué)改革探索
基于C語言的學(xué)生成績管理系統(tǒng)的設(shè)計與實(shí)現(xiàn)
基于C語言的常用排序算法比較研究
論子函數(shù)在C語言數(shù)據(jù)格式輸出中的應(yīng)用
原平市| 佛教| 鄢陵县| 名山县| 赤壁市| 安新县| 琼海市| 连云港市| 和平区| 浏阳市| 深泽县| 海城市| 五河县| 麻江县| 吴旗县| 苍梧县| 黔江区| 麻栗坡县| 高陵县| 香港 | 铜川市| 炎陵县| 海口市| 玉门市| 晋宁县| 璧山县| 孝昌县| 怀安县| 百色市| 成武县| 辽中县| 墨竹工卡县| 正安县| 枣强县| 揭东县| SHOW| 永修县| 固始县| 沛县| 依安县| 鞍山市|