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