RSA加密算法在漢字中的應(yīng)用及其C語言實現(xiàn)

現(xiàn)在人們越來越多地使用網(wǎng)絡(luò)來進(jìn)行交流、進(jìn)行信息交換,如何保證信息的安全是一個很重要的間題,下面我們就通過在漢字中應(yīng)用RSA加密算法,使用C語言實現(xiàn)漢字的加密和解密。

對漢字的加密、解密,采取先對單個字進(jìn)行加、解密,進(jìn)而實現(xiàn)對整個句子進(jìn)行加、解密的方法。

(1)漢字?jǐn)?shù)字化 

漢字不是數(shù)字,因此不能直接應(yīng)用RSA加密算法進(jìn)行加、解密,需要先對其進(jìn)行數(shù)字化。漢字的數(shù)字化以及數(shù)字的漢字化可以借助Office辦公軟件中的Excel來完成,在的Excel來中有兩個函數(shù)code()和char(),利用“code(漢字)”可以將一個漢字轉(zhuǎn)化為一個5位的整數(shù),利用"char(數(shù)字)”可以將一個符合要求的5位數(shù)字轉(zhuǎn)化為一個漢字,如在的Excel來中輸入“CODE(“我”)”,可得到數(shù)字“52946”,輸入“CHAR (“49864”)”,可得到漢宇“壺”。

(2)對每一位數(shù)加密

根據(jù)C語言的特點,C語言的變量的取值范圍有限,無法直接得到RSA加密算法需要的數(shù)字,因此先對5位數(shù)中的每一位數(shù)字進(jìn)行加密,然后由每位數(shù)字對應(yīng)的密文組成該漢字對應(yīng)的密文,每一位數(shù)字對應(yīng)的密文用兩位數(shù)字表示,如明文中的“6”對應(yīng)的密文用“30”表示,明文中的“1”對應(yīng)的密文用“01”表示。

編寫的對一位數(shù)進(jìn)行加、解密的C語言程序如下:

RSA加密算法在漢字中的應(yīng)用及其C語言實現(xiàn)

RSA加密算法在漢字中的應(yīng)用及其C語言實現(xiàn)

通過運行程序知,0,1,2,3,4,5,6,7,8,9對應(yīng)的密文分別為0,1,29,9,16,14,30,28,2,15。

(3)對漢字的加密  

將漢字對應(yīng)的數(shù)字的每一位加密后,由每位對應(yīng)的兩位密文可以組成漢字對應(yīng)的10位的密文,如:漢字“我”數(shù)字化后為“52946",對應(yīng)的密文為“1429151630”,編寫的C語言程序如下:

RSA加密算法在漢字中的應(yīng)用及其C語言實現(xiàn)

RSA加密算法在漢字中的應(yīng)用及其C語言實現(xiàn)

通過運行程序,輸入漢字“我”對應(yīng)的數(shù)字“52946”,得到密文“1429151630.00000”,將其變?yōu)檎麛?shù),即為“1429151630”。如果要加密“我是中國人”這句話,先將其數(shù)字化為“5294651911 _54992 _47610 _51403”,然后分別進(jìn)行加密,得到密文“1429151630 _14011501011416151529 _16283001001401160009”。

(4)對加密后的漢字進(jìn)行解密

得到密文后,利用密鑰d對其進(jìn)行解密,即可得到原文。

編寫的C語言程序如下:

RSA加密算法在漢字中的應(yīng)用及其C語言實現(xiàn)

RSA加密算法在漢字中的應(yīng)用及其C語言實現(xiàn)

仍然以“我是中國人”為例,其加密后的數(shù)據(jù)為“1429151630 _14011501011416151529 _16283001001401160009”,對每個數(shù)進(jìn)行解密,即得到明文“5294651911 _54992 _47610 _51403”,然后漢字化即為“我是中國人”。

小知識之RSA加密算法

RSA公鑰加密算法是1977年由Ron Rivest、Adi Shamirh和LenAdleman在(美國麻省理工學(xué)院)開發(fā)的。RSA取名來自開發(fā)他們?nèi)叩拿?。RSA是目前最有影響力的公鑰加密算法,它能夠抵抗到目前為止已知的所有密碼攻擊,已被ISO推薦為公鑰數(shù)據(jù)加密標(biāo)準(zhǔn)。RSA算法基于一個十分簡單的數(shù)論事實:將兩個大素數(shù)相乘十分容易,但那時想要對其乘積進(jìn)行因式分解卻極其困難,因此可以將乘積公開作為加密密鑰。