[摘要] 電子商務(wù)的發(fā)展使得網(wǎng)絡(luò)信息的安全傳輸問題顯得尤為重要。文章對電子商務(wù)中經(jīng)常會用到的RSA加密算法原理進行了描述并用Java語言編程實現(xiàn)了RSA算法。該程序由五個模塊組成,它們是主函數(shù)模塊、轉(zhuǎn)換字符串為大整數(shù)模塊、轉(zhuǎn)換大整數(shù)為ASCII字符串模塊、加密模塊和解密模塊。
[關(guān)鍵詞] RSA 公鑰 私鑰 加密 解密 Java語言
隨著信息技術(shù)的發(fā)展,特別是電子商務(wù)的發(fā)展,網(wǎng)絡(luò)信息的安全傳輸逐漸成為人們最為關(guān)心的事情。RSA加密算法是目前應(yīng)用最廣泛的公鑰加密算法。特別適用于通過internet傳送的數(shù)據(jù),常用于數(shù)字簽名和密鑰交換。本文用Java語言實現(xiàn)了RSA算法。
一、RSA算法描述
密鑰對的產(chǎn)生。選擇兩個大素數(shù)p 和q 。計算:n=p*q,然后隨機選擇加密密鑰e,要求e和(p-1)*(q-1)互質(zhì)。最后,利用Euclid算法計算解密密鑰d,滿足e*d=1mod((p-1)*(q-1)),其中n和d也要互質(zhì)。{e,n}是公鑰,{d,n}是私鑰。加密信息 m(二進制表示)時,首先把m分成等長數(shù)據(jù)塊 m1 ,m2,…,mi,塊長s,其中2∧s<=n,s盡可能的大。對應(yīng)的密文是:ci=(mi∧e)mod n,解密時作如下計算:mi=(ci∧d)mod n
二、程序?qū)崿F(xiàn)的主要思想
Java中的BigInteger類提供了實施RSA公鑰加密系統(tǒng)所必需的全部可能性。本程序根據(jù)生成公鑰/私鑰對來論證RSA。用戶輸入一串字符串,用公鑰加密字符串,用私鑰解密字符串,所有的結(jié)果被輸出。
三、主要算法流程和框圖
1.主要算法流程
隨機生成p,q→計算N=p*q→計算p1=p-1,q1=q-1→計算p1q1=p1*q1→隨機生成e,e須滿足gcd(p1q1,e)=1,1 2.主要框圖 程序算法流程圖 四、主要模塊說明 1.主函數(shù)模塊 生成公鑰/私鑰對,調(diào)用加密模塊對明文進行加密,然后調(diào)用解密模塊對密文進行解密。 2.轉(zhuǎn)換字符串為大整數(shù)模塊 轉(zhuǎn)換字符串為大整數(shù)。字符串應(yīng)該僅由ASCII字符組成。簡單地將ASCII代碼連接而形成整數(shù)。 3.轉(zhuǎn)換大整數(shù)為ASCII字符串模塊 轉(zhuǎn)換大整數(shù)為ASCII字符串。整數(shù)里的各個字節(jié)簡單地被轉(zhuǎn)換成對應(yīng)的ASCII代碼。 4.加密模塊 用公鑰(N,e),應(yīng)用RSA加密算法對字符串進行加密。字符串被分成多個數(shù)據(jù)塊,每一個數(shù)據(jù)塊被轉(zhuǎn)換為一個整數(shù),然后這個整數(shù)x用算式:x∧e (mod N)被編碼(加密)。 5.解密模塊 用私鑰(N,d),應(yīng)用RSA解密算法對字符串進行解密。首先用算式:x∧d(mod N)解碼整數(shù)列里的每一個整數(shù)x,然后每個被解碼的整數(shù)被轉(zhuǎn)換為一個字符串,且所有的字符串被連接成一個單一的字符串。 五、程序使用說明 在Textpad中,輸入源程序后,保存源程序(假若源程序文件名為RSA.java),編譯源程序,編譯成功后,在原RSA.java程序所在的文件夾中生成RSA.class文件,然后運行該程序,如果一切運行正常,則輸出正確結(jié)果。 六、結(jié)束語 本文用Java語言實現(xiàn)了RSA算法。由于用到j(luò)ava中的BigInteger類,因此運行效率較高。如果用C語言編程,一個運行結(jié)果大約需要2個多小時才能算出,而用java中的BigInteger類編程則幾秒鐘結(jié)果就出來了,因此,對RSA算法用Java編程顯然比用C語言編程的效率要高得多。 參考文獻: [1][美]William Stallings著.密碼編碼學(xué)與網(wǎng)絡(luò)安全:原理與實踐(第二版)[M].楊明等譯.北京:電子工業(yè)出版社,2001 [2]唐大仕編著:Java程序設(shè)計[M].北京:北方交通大學(xué)出版社,清華大學(xué)出版社,2003 [3]田文春韋崗:RSA算法的Java實現(xiàn)[J].計算機工程與應(yīng)用. 2001,(24):43~44,62 [4]Sun Microsystems, Inc. ClassBigInteger.[DB/OL].2003, http://java.sun.com/j2se/1.4/docs/api/java/math/BigInteger.html 注:本文中所涉及到的圖表、注解、公式等內(nèi)容請以PDF格式閱讀原文。