賈澤鋒,崔夢(mèng)天,王保琴,謝 琪,姜 玥
(1.西南民族大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,四川 成都 610041;2.陸軍工程大學(xué)通信士官學(xué)校信息技術(shù)基礎(chǔ)教研室,重慶 400035)
Java是大部分研發(fā)工程師愛好的一門語言,到目前為止它的使用率排名第一.Java之所以能有這樣的成績(jī)是因?yàn)樗峁┝撕芏喙δ苣K,這使得開發(fā)過程中解決問題減少了時(shí)間.如Java在安全領(lǐng)域里就包含了在JCA[1]的基礎(chǔ)上擴(kuò)展出的Java加密擴(kuò)展包JCE(Java Cryptography Extension),提供了DES算法、AES算法、RSA算法、DSA算法等各種加密算法、消息摘要算法和密鑰管理等功能[2].利用Java API提供的安全機(jī)制很容易實(shí)現(xiàn)對(duì)稱加密算法和非對(duì)稱加密算法.本文主要對(duì)非對(duì)稱加密算法在Java環(huán)境里的使用展開研究.
RSA加密算法是非對(duì)稱加密算法里最為典型的加密算法,也是目前使用最廣泛的非對(duì)稱加密算法[3-4],它是可以應(yīng)用在數(shù)據(jù)加密或者數(shù)字簽名場(chǎng)景中[4].這里以甲乙雙方傳遞信息為例[3],甲為消息發(fā) 送者,乙為消息接收者,如圖1和圖2所示:
圖1 生成RSA算法密鑰對(duì)Fig.1 Generate RSA algorithm key pair
圖2 甲向乙傳遞RSA算法加密數(shù)據(jù)Fig.2 A passes RSA algorithm encrypted data to B
如圖1所示,完成公開密鑰的傳送,就可以進(jìn)行對(duì)數(shù)據(jù)加密進(jìn)行發(fā)送并解密如圖2所示.在非對(duì)稱加密算法中,私鑰加密的數(shù)據(jù)只能利用對(duì)應(yīng)的公鑰解密,簡(jiǎn)稱“私鑰加密,公鑰解密”[3],那么按原理上在RSA加密算法里“公鑰加密,私鑰解密”這種方法也是成立的.這使得拿到公鑰的一方能夠利用公鑰加密數(shù)據(jù)發(fā)送數(shù)據(jù)[3].如圖3所示:
圖3 乙向甲傳遞RSA算法加密數(shù)據(jù)Fig.3 B transmits RSA algorithm encryption data to A
如圖3是乙(接收者)使用甲(發(fā)送者)發(fā)送的公鑰加密數(shù)據(jù),甲利用自身的私鑰實(shí)現(xiàn)解密數(shù)據(jù),稱“公鑰加密,私鑰解密”[3].但是,這種方式不推薦使用,因?yàn)樵诠€傳遞的過程中,公鑰很可能被截獲,截獲到公鑰者也有可能給甲方發(fā)送數(shù)據(jù),這時(shí)甲方不能辨別真?zhèn)?,因此,“公鑰加密,私鑰解密”這種形式存在必定的安全隱患[5].
RSA加密算法的數(shù)學(xué)原理是簡(jiǎn)單易懂.設(shè)密文為C,明文為E,則數(shù)據(jù)公式如下表達(dá)式:加密公式:C=ExmodN,則公鑰為(x,N);解密公式:E = CdmodN,則私鑰為(d,N)[6-10].其中mod是取余數(shù).
下面我們舉例模擬生成密鑰對(duì):
通過上面一系列求值最后得到:公鑰(5,323),私鑰(29,323).
關(guān)于Java API提供安全機(jī)制[11-12]的類詳解如圖4所示,本文通過用戶注冊(cè)與登錄的實(shí)例,應(yīng)用RSA算法在使用Java API實(shí)現(xiàn)對(duì)用戶登錄密碼加密與解密的過程,進(jìn)而體現(xiàn)出RSA算法在Java API中具體實(shí)現(xiàn)及使用[13].如圖5~圖9所示:
圖4 RSA在Java API安全類圖Fig.4 RSA in Java API Security Class Diagram
下面以用戶注冊(cè)與登錄為例,具體流程如圖5所示:
圖5 注冊(cè)與登錄Fig.5 Registration and login
(1)生成RSA算法的公鑰和私鑰,如圖6所示:
圖6 生成RSA算法密鑰對(duì)Fig.6 Generate RSA algorithm key pair
在得到公鑰和私鑰的時(shí)候通過BASE64Encoder轉(zhuǎn)化生成字符串結(jié)果如圖7所示:
圖7 公鑰與私鑰結(jié)果圖Fig.7 Public key and private key result graph
(2)得到公鑰和私鑰就可以進(jìn)行對(duì)數(shù)據(jù)的加密與解密的工作,用戶輸入的密碼data=“jiazefeng”為需要加密數(shù)據(jù)的數(shù)據(jù),如圖8和圖9所示:
圖8 公鑰加密Fig.8 Public key encryption
圖9 私鑰解密Fig.9 Private key decryption
圖8和圖9中的data是代表需要加密與解密的數(shù)據(jù),運(yùn)行結(jié)果如圖10所示:
圖10 加密、解密結(jié)果圖Fig.10 Encryption and decryption result graph
通過對(duì)RSA算法在JAVA API中的研究,可以應(yīng)用在對(duì)個(gè)人信息的保密或者是企業(yè)的信息保密.因RSA算法利用一對(duì)密鑰(公開密鑰,私有密鑰)來實(shí)現(xiàn)加密與解密,其操作簡(jiǎn)單,功能強(qiáng)大可以應(yīng)用在對(duì)數(shù)據(jù)進(jìn)行加密的任何場(chǎng)景下,RSA加密算法是目前最適合的一種加密算法,它被人們稱為高級(jí)數(shù)據(jù)加密算法,通過這一特點(diǎn)完美有效的進(jìn)行對(duì)數(shù)據(jù)加密,進(jìn)而有效的保護(hù)數(shù)據(jù)安全.