im安全层协议设计(instant message 即时通讯)
消息的保密性非常重要 ,谁都不希望自己聊天内容被看到,所以安全层是必不可少的。
1、SSL证书管理微微复杂,代价有点高。
2、自行加解密自己来搞加解密,核心在于密钥的生成与管理,密钥管理方式有多种,主要有这么三种:
(1)固定密钥
服务端和客户端约定好一个密钥,同时约定好一个加密算法(eg:AES ),每次客户端im在发送前,就用约定好的算法,以及约定好的密钥加密再传输,服务端收到报文后,用约定好的算法,约定好的密钥再解密。这种方式,密钥和算法对程序员都是透明的。
(2)一人一密钥
简单说来就是每个人的密钥是固定的,但是每个人之间又不同,其实就是在固定密钥的算法中包含用户的某一特殊属性,比如用户uid、手机号、qq号等。
(3)动态密钥(一session一密钥)
动态密钥,一Session一密钥的安全性更高,每次会话前协商密钥。密钥协商的过程要经过2次非对称密钥的随机生成,1次对称加密密钥的随机生成,参考固态秘钥,用于加密的秘钥由客户端通过公钥加密发送给服务端,服务端使用私钥解密拿到后续通讯时使用改秘钥对信息进行加密
我尽量简单一些说,如果是大虾,就不用看了。注意,和具体的情况会有些不同,因为为了说明原理,简化了。
一,公钥私钥
1,公钥和私钥成对出现
2,公开的密钥叫公钥,只有自己知道的叫私钥
3,用公钥加密的数据只有对应的私钥可以解密
4,用私钥加密的数据只有对应的公钥可以解密
5,如果可以用公钥解密,则必然是对应的私钥加的密
6,如果可以用私钥解密,则必然是对应的公钥加的密
明白了?
假设一下,我找了两个数字,一个是1,一个是2