王傳俊
(煙臺汽車工程職業學院,煙臺,265500)
互聯網技術的普及和發展使得人們的生活急速進入信息時代,在實現信息和資源共享的同時,數據的安全問題也變得越來越重要。每天有大量的數據通過互聯網進行保存、處理和傳遞,為了保證數據在傳輸過程中的安全性,需要使用加密技術對數據進行加密和解密,避免數據在傳輸過程被泄露或篡改。對數據加密技術來說,它的核心是密碼算法,通常采用高級語言(如C 語言)編寫程序,來實現數據的加密。
根據分組密碼學算法按照密鑰的分配方式的不同,算法被分為:對稱算法和非對稱算法。對稱加密算法中比較常用的算法包括DES、3DES 和ASE 等算法。非對稱算法中比較常用的算法包括RSA、ECC 等算法。
下面就對其中較為典型的兩種算法DES 和RSA 使用C 語言進行實現和對比分析。
1.1 DES(Data Encryption Standard 數據加密標準)是一種對稱加密算法。對稱加密算法是指加密和解密使用相同密鑰的加密算法。它要求發送方和接收方在安全通信之前,商定一個密鑰,這個密鑰是對稱算法的安全依賴。加密密鑰能夠從解密密鑰中推算出來,同時解密密鑰也可以從加密密鑰中推算出來。因此,DES 算法的特點是算法公開,計算量小,加密速度快,加密效率高,適用于加密大量數據的場合。目前 DES 算法在POS、ATM、磁卡及智能卡(IC 卡)、加油站、高速公路收費站等領域被廣泛應用。
DES 算法的原理是用輸入64bit 明文對56bit 密鑰進行加密,通過16 次迭代輸出64bit 密文。由于加密密鑰和解密密鑰完全相同,明文分組分塊加密,在對稱加密原理中屬于分組加密。
1.2 RSA(三位美國麻生理工學院的科學家:Ron Rivest、AdiShamirh 和 Leonard Adleman,三人姓氏開頭字母拼在一起。)是一種非對稱加密算法,也就是使用不同的加密密鑰與解密密鑰,是一種“由已知加密密鑰推導出解密密鑰在計算上是不可行的”密碼體制。在公開密鑰密碼體制中,加密密鑰(即公開密鑰)PK 是公開信息,而解密密鑰(即秘密密鑰)SK 是需要保密的。加密算法E 和解密算法D 也都是公開的。雖然秘密密鑰SK 是由公開密鑰PK 決定的,但卻不能根據PK 計算出SK。RSA 的安全性依賴于大數的因子分解,但目前并沒有從理論上證明破譯RSA 的難度是否就等于大數分解。在互聯網的數字簽名和認證中常使用RSA 算法實現數據保護。
DES 算 法 中 只 用 到64 位 明 文 中 的56 位,而 第8、16、24、......64 位這8 個位并未參與DES 運算,而是將這8 位作為奇偶校驗位。也就是說DES 的安全性是基于除了8,16,24,……64 位外的其余56 位的組合變化256 種才得以保證的。因此,在實際應用中,通常避開使用第8,16,24,......64 位作為有效數據位,而使用其它的56 位作為有效數據位,才能保證DES 算法安全可靠地發揮作用。
DES 算法常常采用按位置換。明文和密鑰都按ASC Ⅱ碼標準轉化成二進制碼,然后進行IP 置換,置換后的明文需要進行S 盒的非線性置換,在置換中將56 位置換成48 位,得到的48 位就是每一次循環中所用的密鑰。在C 語言中,可以選擇模塊化處理:
int DES_SBOX(ElemType data[48]);
加密過程中去除奇偶校驗位,將剩下的56 位分成兩半。每部分在每一次循環中都左移位一次,然后將輸出與另一半進行“異或”運算;接著交換這兩半,這一過程會繼續下去,但最后一個循環不交換。DES 使用 16 次循環進行置換,代換,移位,最后輸出64 位。生成子密鑰C 語言程序實現如下:

RSA 的安全基于大數分解的難度。其公鑰和私鑰是一對大素數(100 到200 位十進制數或更大)的函數。RSA 的公鑰、私鑰的組成,以及加密、解密的公式可見于下表1 公鑰、私鑰的算法:
RSA 算法描述:
(1)選擇一對不同的、足夠大的素數p 和q。
(2)計算n=pq。
(3)計算f(n)=(p-1)(q-1),同時對p 和q 嚴加保密,不讓任何人知道。

(4)找一個與n 互質的數e,且1<e<n。
(5)計算d,使得de ≡1 mod f(n)。這個公式也可以表達為d ≡e-1mod n
(6)公鑰PK=(e,n),私鑰SK=(d,n)。
(7)加密時,先將明文變換成0 至n-1 的一個整數M。若明文較長,可先分割成適當的組,然后再進行交換。但由于RSA 算法的主要缺陷是運算速度慢,因此在加密過程中要盡量減少冪運算的次數,在這里采用了加法剩余運算。

通過對兩種算法的分析可以看出,RSA 算法的加密解密是一個非常復雜的計算過程,在對數據進行加密解密運算時需要進行大量模冪運算,密鑰的復雜性直接影響了其運行速度。相對于DES 算法的速度慢很多,當數據量很小時,可以考慮采用RSA 加密算法。
DES 算法使用的加密密鑰和解密密鑰完全相同,這種對稱密碼算法可以加快加密解密的速度,當需要加密大量的數據時,采用DES 算法,會提高加解密速度。但其安全系數被降低。其次,采用DES 加密算法其本質就是對加密數據的二進制編碼進行加密,加密時數據分組進行。在加密時,不會對內存中的比特流及存儲方式等特性產生任何影響,只加密二進制代碼本身。如果硬件條件一定,沒有任何改變,則二進制編碼長度會直接對加密時間造成影響,也就是文件越長需要的加密時間越長,文件越短所需的加密時間越短,加密時間和文件大小呈線性關系。加密時間的長短和文件格式無關。

表1 公鑰、私鑰的算法
DES 和RSA 是計算機數據加密技術應用最為廣泛的算法之一, C 語言是比較常用的計算機高級語言,對大多數計算機初學者都容易接受。使用C 語言實現對DES 和RSA 算法的描述,能夠使我們更好地理解加密算法的原理,從而有效地保護數據信息在傳遞過程中的安全性。
[1] 楊曉元,等) 計算機密碼學[M])西安:西安交通大學出版社,2007.3.
[2] 盧開澄.計算機密碼學[M].北京:清華大學出版社,2003.12.
[3] 隋濤.DES 與AES 數據加密算法探討[J].湖北第二師范學語學報,2013.8,66-67.
[4] 吳明航.DES 和RSA 混合加密算法的研究[D].哈爾濱工業大學,2012.12,39-41.
[5] 時華. 基于VC++的DES 與RSA 混合加密算法的實現[J]. 科技信息(科學教研),2007,32:436.
[6] 王艷. 基于DES-RSA 的混合加密技術在數據庫中的研究與應用[D].武漢理工大學,2013.