加密流程
先由前端生成一个 UniqueID
- 前端生成 UniqueID (通讯密道标识)
- 把UniqueID 传给后台
UniqueID = getGuid()
http.post(url, {UniqueID})
后台接收 UniqueID 保存当前讯道id 且返回服务器公钥
ctx.body = {pubkey}
前端接收道服务器端公钥 生成对称秘钥 clientEncryptPassword
- 生成客户端秘钥
- 使用服务器公钥加密客户端秘钥
- 发送信道id和加密后的客户端秘钥给服务器端
clientEncryptPassword = randomString()
clientEncryptPassword = encrypt(clientEncryptPassword , pubkey)
http.post(url, {UniqueID, clientEncryptPassword })
服务器端接收道前端秘钥 生成服务器端秘钥 使用前端秘钥加密发送给服务器端
- 使用clientEncryptPassword 解密 serverEncryptPassword并保存
serverEncryptPassword= encrypt(serverEncryptPassword, clientEncryptPassword )
传输流程
- 前端使用 clientEncryptPassword 加密数据
- 服务器端使用 serverEncryptPassword 加密数据
- 使用UniqueID 标识一组 信道
优点
- 对称加密 使用AES 加密算法
- 在传输层是安全的 因为不知道服务器端私钥所以在整个秘钥交换是安全的
- 每个用户信道都不一样 所以相同的数据不同的用户加密出来不一样 也就没有数据比对的问题