案例一
非对称加密阶段:
1、前端调用login接口,后端返回publicKey;
2、前端根据publicKey对生成的randomNumber16加密生成clientPrivateKey,并传输给后端,后端根据secretKey解密出randomNumber16,生成并返回给前端对称密钥serverPrivateKey。
- clientPrivateKey = getEncryptKey(randomNumber16,publicKey)
3、前端根据serverPrivateKey生成sm4PrivateKey,使用sm4PrivateKey加解密报文;
- strKey = 3desDecrypt(serverPrivateKey,randomNumber16)
- sm4PrivateKey = f(randomNumber16,strKey) use:md5/substring/other fn
对称加密阶段:
1、请求报文加密;
- sm4Encrypt(body)
2、响应报文解密
- sm4Decrypt(body)
案例二
用户端保存一对publicKey
1、login获取token
2、aesKey = getEncryptKey(randomNumber16, publicKey)
- 加密依赖包:jsencrypt
- randomNumber16 = randomString(16)
- publicKey 客户端的一个常量
3、报文加密 aes
encryptBody = encryptFn(body,aesKey) ,axios的data
md5Key = md5Fn(encryptBody),headers中的sign
- 依赖包: js-md5、jsrsasign(验签)
4、报文解密aes
decryptFn(resoponse,aesKey)
网友评论