在上面对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解密,经实践可使用上述方法。测试