动态密钥服务设计(aes128+base64 动态加密方案)
技术栈
- go
- gin
- redis
架构图
密钥保管方案
密钥1(本地保管)
REQ_KEY = "xxxxxxxxxxxxxxxx"
REQ_IV = "yyyyyyyyyyyyyyyy"
密钥2(动态变化)
外部(数据库update触发写入/手工set)写进reidis,redis定时刷新。通过外部的方式,可以把动态密钥和应用服务器隔离,提高安全性。
处理流程
- 1、客户端保存一对密钥1(用于加密),请求密钥服务器获得密钥2(用于解密)
- 2、后台服务端保存一对密钥1(用于解密),从redis中读取密钥2(用于加密)。
- 3、密钥服务器保存一对密钥1(用于解密客户端密钥1加密请求,加密动态密钥2返回给客户端),并且定时更新一对密钥2(从redis中读取密钥2)
密钥请求
密钥的请求是通过https的方式,因为密钥需要安全,可靠的请求。
更新密钥2
当想更新动态密钥,需要外部设置redis:
set pub_key "{\"id\": \"9g1\", \"key\": \"hg92g02fewh7qk11\", \"iv\": \"546d4t546tw32e1f\"}"
字段说明:
- id。密码盐,字符位数改变,客户端和应用后台的密码盐位数也需要改变。统一修改CodeSaltLen变量
- key。aes加密的key
- iv。aes加密的iv