HTTP使用RSA公鑰加密算法加密明文
網(wǎng)站想要加密傳輸數(shù)據(jù)以防被竊取,最可靠的方式莫過于使用公鑰加密算法加密,使用HTTPS協(xié)議的網(wǎng)站在整個傳輸過程中都使用了這個技術,對于未能使用HTTPS的HTTP網(wǎng)站我們也可以自行實現(xiàn)。
功能說明
由于HTTP是直接傳輸明文數(shù)據(jù)的,在網(wǎng)絡安全越發(fā)嚴峻的今天,未經加密的HTTP方式已經變得岌岌可危,谷歌公司更是直接表明在搜索結果中會優(yōu)先考慮使用HTTPS加密的網(wǎng)站。
盡管整體趨勢是向HTTPS傾斜的,但是由于諸多服務器以及CDN等服務商還沒全面兼容HTTPS協(xié)議,目前要實現(xiàn)整站切換至HTTPS協(xié)議可行性還不高。
同時安全形勢又刻不容緩,對此,我們可以自行實現(xiàn)RSA加密私密信息。
算法說明
由于多夢數(shù)學不是很好,RSA公鑰加密算法的具體實現(xiàn)多夢就不多說了,對算法的實現(xiàn)有興趣的童鞋可以去看看阮一峰的“RSA算法原理”,下面多夢就說說RSA算法的效果。
RSA算法是非對稱加密算法的一種,也叫公鑰加密。
和對稱加密算法不同的是,對稱加密算法是加密和解密都使用同一把鑰匙同一種規(guī)則,也就是如果你知道怎么加密的,你就知道怎么解密了。所以算法和密鑰不能泄露,否則加密就無意義了。
而公鑰加密算法則是同時擁有兩把鑰匙,一個叫公鑰,一個叫私鑰。這兩個鑰匙是對應的,使用公鑰加密的內容只有使用私鑰才能解密,使用私鑰加密的內容只有使用公鑰才能解密。所以算法和公鑰都是可以公開的,只要私鑰還是私密的,就是安全的。
實現(xiàn)思路
由于我們是加密HTTP要發(fā)送的數(shù)據(jù),所以加密過程是要在客戶端瀏覽器完成的,算法和密鑰都需要在發(fā)送HTTP數(shù)據(jù)之前就已經存在瀏覽器中,此時使用對稱加密算法已經無意義,因為別人根據(jù)你這個加密可以直接解密。
所以我們需要選擇非對稱性加密,在網(wǎng)頁中引入算法和公鑰加密,然后發(fā)送HTTP數(shù)據(jù)到服務器,服務器再根據(jù)私鑰解密。因為私鑰是私密的,所以算法和公鑰公開也是無法解密,也是安全的。
具體到HTTP請求的加密實現(xiàn),就是在網(wǎng)頁提交表單數(shù)據(jù)之前使用JavaScript實現(xiàn)公鑰加密數(shù)據(jù),然后服務器接受到加密數(shù)據(jù)后,使用PHP或其他服務器語言進行私鑰解密。