在上面對AES加密的初步認知中,咱們知道AES加密須要一個key,加減密雙方都須要知道,那這個key怎麼設定好?看一下下面的一種場景: 在社交的APP中,通常對聊天內容都會是加密的,A和B聊天,A和C聊天。若是這個Key都是固定的,那麼是否是意味着:若是B經過蠻力等方法破解某段聊天信息,拿到了和A之間的AES_Key,再抓包劫持了A和C的傳輸內容,就能夠輕易的破解A和C之間的內容,顯然這種作法是不安全的。 因此安全的模式是A和B,A和C,B和C, 他們聊天內容加密的key都是不一樣的(再安全點加密方式也能夠有區別)。那樣即便A和B的加密被破解了,A和C,B和C等其餘的聊天記錄都不會被輕易破解。算法
那怎麼傳送這個key,確定不是明文傳送,那用哪種加密方式更好點,通常都是非對稱加密,如RSA、ECC等。 非對稱加密:加減密的密鑰不一樣,分私鑰和公鑰。 主流的非對稱加密方式如:RSA和ECC 這邊爲何選用ECC,客觀因素有不少:安全
AES的Key通過接收方公鑰加密和AES加密的內容 一塊兒發送給接收方,接收方經過本身私鑰先將加密後的AES_KEY解密,再經過解密獲得的原始AES_KEY,並用該key解密發送方發送的內容,獲得明文。 以下圖所示:函數
上面這種加密方式性能上絕對是槓槓的,雖然本身沒有用具體的數據測試過,但也找過不少資料看了,加密算法速度高於性能
擴展:AES和ECC的混合加密還有一種特殊的場景,先來看一下ECC 數學函數 Q=dG; (Q是公鑰 d是私鑰 G是他們之間的關係);Q1 = d1G1; Q2=d2G2;那麼能推出 key=Q1d2G2 = Q2d1G1; 有沒有亮點 1的公鑰和2的私鑰 2的公鑰和1的私鑰 他們能獲得一個相同的值 key。那麼咱們能不能把這個相同的key 做爲他們之間AES加減密的key呢? 那咱們是否是能夠在這個發送過程少傳一個AES密鑰key‘的參數,那在傳輸的過程透露的信息是否是有能夠少,安全性是否是會高一點呢? 32位的ECC加密 和32位AES解密,經實踐可使用上述方法。測試