网上经常要用到数据加密的功能,自定义协议加密解析往往才是安全的。
最近上班也在弄这个东东,闲话不多说。
一、基础自定义协议
协议组成结构
协议组成结构为:起始符 + 标题 + 账号 + 密码 + 时间 + 校验码 + 结束符。
起始结束符
所有的协议开始和结束符都采用BE开始BE结束。
(这里可以由自己设计,如果涉及到同时发送多条协议的时候或者有出现协议不完整等情况。可以采用代替:如中间BE用BD02表示,BD用BD01表示)
标题
标题规则属性:协议类型+协议长度+账号长度+密码长度
协议类型:01 = 用户聊天工具登录类型
协议长度:整条协议的总字符长度。
账号长度:账号字符长度。
密码长度:密码字符长度。
标题采用字符长度8存储各信息。每两个字符采用十六进制以字符的方式表达。
例如:011C0A0B
01:协议聊天工具登录类型。
1C:十六进制转十进制等于28,代表该协议总字符长度为28。
0A:同上,账号长度为10。
0B:同上,密码长度为11。
账号密码
账号密码采用DES加密后字符串。
时间
时间格式yyyyMMddHHmmss进行DES加密后的字符串。
校验码
校验码为协议体(不包含校验码,起始结束符)按照字符两位向后异或最后所得的十六进制字符。
二、协议生成
第一步:
账号、密码、时间进行DES加密。然后存储各个加密后的字符长度。
第二步:
组装协议标题,把各个长度转换成十六进制,填充标题。
注:总长度为=账号密码时间总长度 + 起始结束长度4 + 校验码长度2 + 标题长度8
第三步:
从标题到时间的进行异或得出校验码。
第四步:
加上起始结束符,并组装整个协议字符串。
三、协议解析
第一步:
判断协议起始结束字符是否有效。
第二步:
获取协议校验码(倒数3,4位),获取协议体(第3位开始到倒数第5位)进行异或和比较,判断协议是否有效。
第三步:
获取协议标题(第3至10位),得出协议体属性。
第四步:
根据协议体属性,获取账号密码时间,进行DES解密。
这只是个基础的协议,需要复杂的可以在这个基础上根据自己的需求更改添加更多的复杂属性。