SDK中主功能类图设计
AospClient是供客户端直接调用的接口类。通过该类的方法可以实现对AOSP的服务访问。
AospResponse和AospRequest分别是请求的实体类和应答的实体类。
HttpPostUtils是构建请求的类,其中的静态方法实现了对请求参数的封装加密封以及请求的发送。该类是最主要的类。(该类中处理的东西有点多,几乎所有的逻辑都在这儿实现)
他们的关系如图所示。还有其他的一些类没有列出都是对他们的支持。
SDK数据加密
整个数据加密,就是将上图中左侧的数据经过一些算法得到右侧的HttpPost类,其实最终过程是为发送一个符合规则的HTTP报文,这里报文中的数据用HttpPost来封装。
规则:(AospRequest简称AR,AospClient简称AC)
1、AospRequest.md5生成
将A中的dataJOSN化,再用MD5加密得到String:md5,再将md5赋值给A.md5。
2、A加密
将A对象JOSN化(list除外),得到content。再用AEC算法将(以AC.secret为参数)对content加密,得到密文contentCipher。
3、签名sign
String sign = 对content进行MD5加密运算。
组装HttpPost
HEAD部分:
“parternerKey”:AC.partnerKey
“sign” : sign
请求长度(附件):XXX
请求长度(主体):XXX
ENTITY部分:
xxx:contentCipher(加密后的主体数据)
附件内容实现略。
AOSP报文解析
AOSP对请求的报文的验证和解析都在拦截器中实现。
1、获取请求HEAD中的,请求时间,接入者身份,请求长度,签名等等
2、校验请求时间(当前时间与报文中的请求时间做比较)
3、校验接入者KEY(查看数据库中是否有该合作伙伴的KEY)
4、校验报文主体(验证报文的合法性)
4.1、content = 解密contentCipher
4.2、校验content长度(是否为空,长度是否和报文头中的数据一致)
4.3、校验签名sign
5、解析content中数据,封装成 AospServerRequest对象,该对象为包含了AOSP系统定义的业务数据字段。