如何將密鑰傳遞給對方?
這個問題有點專業(yè)性,剛好我項目中這兩種加密技術(shù)都使用過,對這兩種加密方式有一定的理解。
可能有些小伙伴還不太清楚這兩種加密方法,那在回答問題前,我們先搞懂清楚是對稱加密和非對稱加密。
對稱加密通常是采用單鑰密碼系統(tǒng)的加密方法,同一個密鑰可以同時用作信息的加密和解密,這種加密方法稱為對稱加密,也稱為單密鑰加密。
對稱加密對內(nèi)容的加解密需要使用相同的算法,對稱加密速度快,一般用于消息發(fā)送方數(shù)據(jù)量比較大時使用。
所謂對稱,就是采用這種加密方法的雙方使用方式用同樣的密鑰進行加密和解密。密鑰是控制加密及解密過程的指令。算法是一組規(guī)則,規(guī)定如何進行加密和解密。因此加密的安全性不僅取決于加密算法本身,密鑰管理的安全性更是重要。因為加密和解密都使用同一個密鑰。
非對稱加密非對稱加密算法需要兩個密鑰:公開密鑰(publickey:簡稱公鑰)和私有密鑰(privatekey:簡稱私鑰)。
公鑰與私鑰是一對,如果用公鑰對數(shù)據(jù)進行加密,只有用對應(yīng)的私鑰才能解密。因為加密和解密使用的是兩個不同的密鑰,所以這種算法叫作非對稱加密算法。
公鑰與私鑰是不相同的,并且只能公鑰加密,私鑰解密,所以稱為非對稱加密。
非對稱加密算法強度復(fù)雜、安全性依賴于算法與密鑰但是由于其算法復(fù)雜,而使得加密解密速度沒有對稱加密解密的速度快。
非對稱密鑰體制有兩種密鑰,其中一個是公開的,這樣就可以不需要像對稱密碼那樣傳輸對方的密鑰了,這樣安全性就大了很多。
非對稱加密算法核心就是質(zhì)因數(shù)分解,大家感興趣可以去搜索李永樂老師的講解視頻。
對稱加密算法的使用對稱加密算法加密速度快,非常適合對安全性要求不高的數(shù)據(jù),而且支持大量數(shù)據(jù)一次性加密。
我們是在APP開發(fā)的,會從后臺服務(wù)器獲取數(shù)據(jù),在這個數(shù)據(jù)傳輸?shù)倪^程中會存在加密操作。
下面先介紹下對稱加密算法在代碼中的表現(xiàn)形式。
我是采用Java編程的,java里面已經(jīng)封裝好了對稱加密代碼庫,所以我們直接調(diào)用就可以實現(xiàn)對稱加密。
如圖,SecretKeySpec類主要是負責(zé)密鑰的實現(xiàn)算法,比如有AES、DES等算法,那我們一般使用AES算法。
Cipher類是負責(zé)具體的加解密工作,只需把密鑰加密算法和加密內(nèi)容傳入,就能獲得加解密好的字節(jié)數(shù)組。
在項目中,一般是用于對安全性不高,但數(shù)據(jù)量較大的接口做對稱加密處理。我之前做過一個B端項目,里面有個業(yè)務(wù)中心需要獲取大量的業(yè)務(wù)數(shù)據(jù),那這個數(shù)據(jù)用的就是對稱加密。
我還做過一個銀行項目,里面除了登陸和修改密碼的接口,其他的接口全用的對稱加密。
非對稱加密算法的使用通過X509EncodedKeySpec類獲取標準的公鑰,X509是密碼學(xué)里公鑰證書的格式標準,這里獲取的公鑰就是按照 X.509 標準進行編碼的密鑰的字節(jié)數(shù)組。
通過KeyFactory類獲取加密算法類型,一般是RSA。
然后再用Cipher類進行加密。
非對稱加密由于算法復(fù)雜,所以加密速度相對較慢,而且RSA算法只能支持加密128bit數(shù)據(jù),其中還包括padding的11bit,所以實際上只能加密117bit的數(shù)據(jù)。
在APP端項目中,一般是針對安全性要求高,而且數(shù)據(jù)量小的接口。比如項目中的的登陸,涉及到賬戶密碼的傳輸,可以用非對稱加密。
對稱加密時,如何將密鑰傳遞給對方直接通過網(wǎng)絡(luò)傳遞,比如微信直接傳遞,這種方案一般是同一公司內(nèi)部人員進行數(shù)據(jù)傳遞時使用,此種方案密鑰泄漏的風(fēng)險極高。
通過物理方式傳遞,比如銀行的U盾,使用時插入U盾,讀取里面的密鑰,進行數(shù)據(jù)加解密傳輸,這種方案相對比較穩(wěn)妥,物理方式存儲密鑰,一般不容易泄露,除非U盾丟失。通過第三方分發(fā)密鑰,A和B在在加解密通信前,先各自到第三方獲取密鑰。這種方案最為穩(wěn)妥,雙方都不知道實際密鑰,而且下一次通信時密鑰會重新獲取。通過非對稱加密方式對密鑰進行加密傳輸,這種方式也不錯,我項目里面也有使用這種方案,通常是針對動態(tài)密鑰的接口。如果用非對稱加密,加密時間過長怎么解決?可以將加密內(nèi)容截取,分段進行加解密。可以在加密前進行字符串長度判斷,如果加密內(nèi)容超過了117bit,就對半截取,依次下去。然后解密方在進行拼接顯示。此種方案實現(xiàn)比較簡單,但需要雙方實現(xiàn)此邏輯。
可以將內(nèi)容打包生成MD5值,然后將MD5值加密傳遞,解密方通過MD5值校驗文件的真實性與正確性。此種方案雖然能解決加密時間過長問題,但是無法保護文件,一旦被抓包獲取,就直接能看到內(nèi)容,所以對網(wǎng)絡(luò)安全沒有絕對把握的話,不要使用此種方案。總結(jié)對稱加密和非對稱加密應(yīng)用在生活的方方面面,比如我國古代的虎符,只有兩半合成時才能調(diào)兵遣將,這也是對稱加密的體現(xiàn),今天我們以IT領(lǐng)域舉例說明,在密鑰傳輸中如何保證密鑰的安全性,也給出了非對稱加密時間過長的解決辦法,但需要結(jié)合使用場景去選擇解決方案。
在人性浮躁的社會,人人都缺乏安全感,加密顯得格外重要!
我是非著名攻城獅,希望我的回答對你有用,感謝您的閱讀與支持!