方法应该有很多种:
双方提前制定好加密算法和密钥,但危险就是有人泄露了密钥和算法。
所以最好就是有个密钥动态生成,然后双方协商,但还不能让别人知道。
https采用的ssl:
1) 服务动态生成一对公钥A和密钥B(非对称加密),然后把公钥A发送给客户端,客户端自己动态生成一个对称密钥C,然后通过公钥A
加密后发送给服务器,服务器通过密钥B得到对称密钥C。 此后双方通过对称密钥C加密数据。
这样的算法很安全,别人没法提前知道公钥A和密钥B,就算通过抓包知道公钥A,那么也无法知道对称密钥C。
Diffie-Hellman密钥交换算法原理:
(1)Alice与Bob确定两个大素数n和g,这两个数不用保密
(2)Alice选择另一个大随机数x,并计算A如下:A=gx mod n
(3)Alice将A发给Bob
(4)Bob选择另一个大随机数y,并计算B如下:B=gy mod n
(5)Bob将B发给Alice
(6)计算秘密密钥K1如下:K1=Bx mod n
(7)计算秘密密钥K2如下:K2=Ay mod n
K1=K2,
因此Alice和Bob可以用其进行加解密。
RSA加密算法是基于这样的数学事实:两个大素数相乘容易,而对得到的乘积求因子则很难。加密过程如下:
(1)选择两个大素数P、Q
(2)计算N=P*Q
(3)选择一个公钥(加密密钥)E,使其不是(P-1)与(Q-1)的因子
(4)选择私钥(解密密钥)D,满足如下条件: (D*E) mod (P-1)(Q-1)=1
(5)加密时,明文PT计算密文CT如下: CT=PTE mod N
(6)解密时,从密文CT计算明文PT如下: PT=CTDmodN 这也是SSL中会用一种密钥交换算法。
其实发现了,基本思路就是通过一些方法在网络上交互的密钥,让抓包工具拿不到。尽量采用一些随机数策略,让算法制定人也无法抓包得到密钥。