Feewee-Libs
使用rust开发的适用于android的动态链接库和ios的静态链接库。
加密原理
- 应用启动时,记录当前服务器时间和本地设备获取的时间。
- 需要加密时通过接口path的md字符串、user agent的字符串和计算的当前服务器时间进行签名。
签名时所使用的当前服务器时间的计算方式:
serverTime = localTime + (_serverTime - _localTime)
其中_serverTime
为之前缓存的服务器时间,_localTime
为之前缓存的本地时间。通过上面的计算就能得到当前服务器的时间。
api文档
android
android的.so库由于需要指定包名,所以在android项目必须使用文档指定包名下相同类来做桥接。
1.接口加密
com.feewee.keeperai.utils.HelperNative.class#encrypt
本接口用于对接口进行签名,返回结果为签名字符串,需要传递给服务器做安全校验。
入参 | 类型 | 是否必须 | 说明 |
---|---|---|---|
path | String | 是 | 调用接口的path |
ua | String | 是 | user agent |
2.接口加密(自带时间戳)
com.feewee.keeperai.utils.HelperNative.class#encryptWithTime
本接口用于自带服务器时间对接口进行签名,返回结果为签名字符串,需要传递给服务器做安全校验。
入参 | 类型 | 是否必须 | 说明 |
---|---|---|---|
path | String | 是 | 调用接口的path |
time | Long | 是 | 当前服务器时间戳(通过计算所得) |
ua | String | 是 | user agent |
3.记录服务器时间戳
com.feewee.keeperai.utils.HelperNative.class#marker
本接口用于缓存服务器时间戳,用于后续计算服务器时间。
入参 | 类型 | 是否必须 | 说明 |
---|---|---|---|
time | Long | 是 | 服务器时间戳 |
4.记录服务器时间戳和本地设备时间戳
com.feewee.keeperai.utils.HelperNative.class#markerWithBoth
本接口用于缓存服务器时间戳和本地设备时间戳,用于后续计算服务器时间。
入参 | 类型 | 是否必须 | 说明 |
---|---|---|---|
s_time | Long | 是 | 服务器时间戳 |
l_time | Long | 是 | 设备时间戳 |
IOS
ios的.a库由于不需要指定包名,所以可以使用任何包名下的类来做桥接。但是ios需要在使用完签名字符串后进行释放签名字符串。
1.接口加密
encryptWithoutTime
本接口用于对接口进行签名,返回结果为签名字符串,需要传递给服务器做安全校验。
入参 | 类型 | 是否必须 | 说明 |
---|---|---|---|
path | const char | 是 | 调用接口的path |
ua | const char | 是 | user agent |
2.接口加密(自带时间戳)
encryptWithTime
本接口用于自带服务器时间对接口进行签名,返回结果为签名字符串,需要传递给服务器做安全校验。
入参 | 类型 | 是否必须 | 说明 |
---|---|---|---|
path | const char | 是 | 调用接口的path |
time | int64_t | 是 | 当前服务器时间戳(通过计算所得) |
ua | const char | 是 | user agent |
3.记录服务器时间戳
marker
本接口用于缓存服务器时间戳,用于后续计算服务器时间。
入参 | 类型 | 是否必须 | 说明 |
---|---|---|---|
time | int64_t | 是 | 服务器时间戳 |
4.记录服务器时间戳和本地设备时间戳
markerWithBoth
本接口用于缓存服务器时间戳和本地设备时间戳,用于后续计算服务器时间。
入参 | 类型 | 是否必须 | 说明 |
---|---|---|---|
s_time | int64_t | 是 | 服务器时间戳 |
l_time | int64_t | 是 | 设备时间戳 |
5.释放签名字符串
free_str
本接口用于释放由rust代码产生的字符串内存。
入参 | 类型 | 是否必须 | 说明 |
---|---|---|---|
str | char | 是 | 签名字符串 |