radom : 16位随机数(纯数字): 生成16位随机数截取前10位+生成16位随机数截取前6位
userName: base64(客户端操作系统登录名称).替换“=”为空
fw_timeout_str:当前时间戳
version:fwknop的版本号2.0.2
messageType:消息类型 1 打开端口
access_buf: base64(消息体).替换“=”为空 客户端ip,协议/需要打开的端口 172.16.30.41,tcp/8100
CLIENT_TIMEOUT: 授权时间 秒
Magic:“Salted__” 固定值
Salt: 8位ASCII值 (生成随机数将值转换成ASCII值)
- message_str 格式: 用“:”将以上字段拼接成字符串 radom:userName: fw_timeout_str:version:messageType:access_buf:CLIENT_TIMEOUT
- 摘要处理digest hash sha256对1进行加密,结果进行base64后替换“=”: base64(sha256(message_str)).替换“=”为空
- AES的CBC对 1:2 进行加密结果进行base64去掉"="
key: 3.5的前32位
iv: 3.5的后16位
3.1 key:配置文件的key进行解码
3.2 temp_key 前16位是0+用 3.1key处理后的key+Salt+补0到64位)
//循环md5加密 每次循环count+16
//循环条件 count<iv长度
3.3 第一次md5 md5( 3.1 key的长度+Salt)
3.4 第二次md5 md5(从3.3 第一次md5的结果+3.1 key的长度+Salt)
3.5 (3.3+3.4+3.5)第三次md5 md5(从3.4 第二次md5的结果+3.1 key的长度+Salt) - hmac (hmac 密钥解密)
4.1 拼接数据 对 (Salted__+Salt+3的结果)进行base64去掉"="
4.2 对4.1进行hmac
4.3 对4.2进行base64去掉"=" - spaData
4.1 的去掉前10位+4.3