S = key + url_encode(path) + T签名 SIGN = md5(S).to_lower(),to_lower 指将字符串转换为小写; 一般会这样签名API接口开发时,如果考虑到接口的安全和参数不可串改,通常做法一般是吧参数通过 一定的算法签名后把签名的 sign 值一起发给服务端,这样服务端也根据除去 sign 参数,把所有参数也经过签名后,判断客服端传递的 签名是否匹配。这样就解决了,但是有个问题,签名算法基本都一样,能做的就是签名时加上一个 key 值,但是这个key值放在客户端怎么保证安全呢。比如放在 web 端,js 代码是直接可以看得,这样肯定不安全,放在 android 上面貌似也不安全,因为 apk 是可以反编译的。有小伙伴解决过这个问题的么?
2 回答
紫衣仙女
TA贡献1839条经验 获得超15个赞
首先要确定sign
是干什么的。
sign
的主要目的是保证数据的完整性,防止在网络传输的过程中篡改数据。
name=kevinheight=170key=$$key$$
假如上面的数据签名字符串是 name=kevin&height=170$$key$$
签名结果是 c5c05d54d25791b0551b25a482d8c2e2
。这个 key
在客户端是可见,别人也可以轻易拿到这个参数。
但是拿到这个key
又有什么意义呢?
因为key
是不会在网络中进行传输的,所以服务器最终生成签名的key
还会是使用$$key$$
,即使你修改了数据,也修改了客户端的key
但是你没有修改掉服务器的key
,最后服务器还会按照自己的方式生成sign
。如果你修改了数据,最终也只是签名结果不一致而已。
守着一只汪
TA贡献1872条经验 获得超3个赞
sign里存放的都是保密信息,比如用户的id或者其它用于验证api合法性的参数
接口的请求参数一般是不放在sign里的,直接明文传输用https加密通信过程就可以
sign是服务端加密后传给客户端存放,在请求api时带到服务端验证身份合法性的,里面不会有接口的请求信息,这两个是要分开的
- 2 回答
- 0 关注
- 779 浏览
添加回答
举报
0/150
提交
取消