DES加密算法之多線程技術(shù)加密

隨著計算機的普及,越來越多的信息以數(shù)字方式保存,為了讓文件更加安全的傳輸及保存,最普遍的做法是對信息進行加密處理。傳統(tǒng)的加密算法都采用單個進程來實現(xiàn),雖然可以保證數(shù)據(jù)的安全,但在實際使用中會花費相當長的時間。我們將多線程技術(shù)引入DES加密算法,在不影響加密安全的前提下加快加密的速度。

一、DES加密算法簡介

DES(Data Encryption Standard)加密算法具有較高的安全性,到目前為止,除了用窮舉搜索法對DES加密算法進行攻擊外,還沒有發(fā)現(xiàn)更有效的辦法。如果以106個/s的速度攻擊DES加密,則它搜索完全部密鑰就需要近2300a的時間,因此加密算法是比較安全的。

DES算法的入口參數(shù)有Key、Data和Mode。其中Key為64位,是DES算法的工作密鑰;Data是被加密或被解密的數(shù)據(jù),也是64位;Mode為DES的工作方式,有加密或解密兩種方式。通信的發(fā)送端將數(shù)據(jù)分成每64bl組,不足64b的補零用Key逐1對每1組數(shù)據(jù)進行DES加密,經(jīng)過加密的數(shù)據(jù)以密文的形式通過網(wǎng)絡傳輸?shù)浇K點后,用同樣的Key對密碼數(shù)據(jù)進行解密,再組合加密后的數(shù)據(jù),這樣,便保證了數(shù)據(jù)在公共通信網(wǎng)中傳輸?shù)陌踩院涂煽啃浴T谕ㄐ啪W(wǎng)絡的源端和目的端通過定期同時改用新的Key,便能更進一步地增強數(shù)據(jù)的保密性。

二、多線程與加密

在實際使用過程中,我們發(fā)現(xiàn),如果待加密的數(shù)據(jù)很多,加密將會消耗相當長的時間,加密1個100K的數(shù)據(jù)文檔大約需要花費16s,數(shù)據(jù)量如果很大2采用DES加密的時間可能長到難以接受的程度。

而當前主流計算機的CPU以雙核和4核居多,可以考慮在加密算法中采用多線程技術(shù)來提高加密的速度。多線程是為了同步完成多項任務,不是為了提高單個任務的運行效率,而是從提高資源使用效率的方面入手提高系統(tǒng)的效率。我們可以把加密拆分成多個子任務,雖然多線程不能提高單個子任務的效率,但是它提高了多個任務所組成的系統(tǒng)的效率。

DES加密算法本身將待加密的數(shù)據(jù)分成每64bl組,然后1組1組的進行加密,最后再組合每一組加密后的數(shù)據(jù)。我們將加密過程改進為由多個線程同時進行晗1,將需要加密的文件進行文件拆分,為每1個線程分配1個分文件,每個線程加密后生成一個臨時文件,結(jié)束后,將所有的文件進行組合,生成加密文件。

在拆分文件之前,需要了解文件長度,如果文件太短(一般小于64b),則沒有必要進行多線程技術(shù)處理,可以直接進行文件的加密運算。啟動N個進程進行運算,將拆分好的數(shù)據(jù)取出N分交給N個進程進行計算。

生成每一塊加密臨時文件,一定要確保其次序不亂,以保證解密后文件的正確性。

三、程序設計

在Windows XP和VC+ +6.0環(huán)境下調(diào)試程序,編寫1個beginthread函數(shù),用它創(chuàng)建1個子線程。程序從主線程開始運行,運行到調(diào)用be-ginthread函數(shù)時,系統(tǒng)為新創(chuàng)建的線程分配1個運行時棧,啟動1個新的線程用于數(shù)據(jù)的加密,并允許原線程和新線程繼續(xù)運行。啟動N個線程后,將分組后的數(shù)據(jù)交給每1個進程進行加密,同時使用多
線程對數(shù)據(jù)進行加密。所有的線程完成加密運算后,需要給出返回值,以便讓程序繼續(xù)運行,主線程必須等待所有線程完成加密運算,這樣做的目的是為了避免出現(xiàn)錯誤,讓所有的臨時文件都可以創(chuàng)建完成。加密完成后,使用DOS命令將生成的臨時文件合并,并保證合并的過程不會出錯。

四、數(shù)據(jù)分析

我們對1組數(shù)據(jù)文件進行加密,然后,通過采集和分析數(shù)據(jù),估算多線程技術(shù)對DES加密算法的運算結(jié)果。

1、數(shù)據(jù)收集

程序運行的PC機是Intel Pentium 4,CPU是1.7 GHz、1.69 GHz,256 M內(nèi)存。

在VC+ +6.0工程中設置多線程模式,按照界面提示輸入。此次采集,我們使用加密模式,輸入加密文本1.txt,保存文本2.txt,密碼是123,啟動IO個線程。用程序加密1個100 K的文本文件,并讓文本中的文字隨機化,更加有利于分析。加密此文件的結(jié)果如表1所示(時間單位為s)。

DES加密算法之多線程技術(shù)加密

運行中CPU的狀態(tài)如圖1所示,圖中峰值(平臺期)即為程序運行時的CPU占用率。該圖表明:在多線程狀態(tài)下,CPU得到了充分的使用。解密的算法和加密是一樣的,所以,這里我們就不再進行解密的數(shù)據(jù)統(tǒng)計了。

DES加密算法之多線程技術(shù)加密

2、數(shù)據(jù)分析

在理論上,數(shù)據(jù)分布服從正態(tài)分布規(guī)律,假設總體的置信水平是0.95 (95%),由所收集的數(shù)據(jù)可以得到各次運行的平均值x和標準方差Sn-1,如表1所示。其置信區(qū)間由公式F±tc/2,n- STIU2得到,其中to.05/2 (10)=2.228 1,計算區(qū)間結(jié)果如表2所示。

DES加密算法之多線程技術(shù)加密

取區(qū)間(14. 9387,14.5851)的平均值14.7619為單個線程的執(zhí)行時間,再讓程序按1個線程的模式運行3次,時間分別為16.3750,16.3130,16.2810s;加權(quán)平均后的結(jié)果是16.2320s。由于每個線程的參數(shù)不同,所以,程序中沒有設置互斥機制,每1個線程均按照自己的方式由操作系統(tǒng)調(diào)動運行,計時系統(tǒng)也是只統(tǒng)計程序在加密時的時間數(shù)據(jù),所以,認為得到的時間可以反映程序的執(zhí)行時間。

在10個線程的情況下,我們可以粗略估計并行的執(zhí)行效率是串行的(14.7619×10/16.232)=9倍。實際運行時,如果是目前主流的雙核或者4核CPU,加密的效率應當會高于9倍。

小知識之多線程技術(shù)

采用超線程即是可在同一時間里,應用程序可以使用芯片的不同部分。雖然單線程芯片每秒鐘能夠處理成千上萬條指令,但是在任一時刻只能夠?qū)σ粭l指令進行操作。而超線程技術(shù)可以使芯片同時進行多線程處理,使芯片性能得到提升。