sign 签名在客户端怎么保证安全(ios,android,web)

S = key + url_encode(path) + T签名 SIGN = md5(S).to_lower(),to_lower 指将字符串转换为小写; 一般会这样签名

API接口开发时,如果考虑到接口的安全和参数不可串改,通常做法一般是吧参数通过 一定的算法签名后把签名的 sign 值一起发给服务端,这样服务端也根据除去 sign 参数,把所有参数也经过签名后,判断客服端传递的 签名是否匹配。这样就解决了,

但是有个问题,签名算法基本都一样,能做的就是签名时加上一个 key 值,但是这个key值放在客户端怎么保证安全呢。比如放在 web 端,js 代码是直接可以看得,这样肯定不安全,放在 android 上面貌似也不安全,因为 apk 是可以反编译的。

有小伙伴解决过这个问题的么?


Cats萌萌
浏览 782回答 2
2回答

紫衣仙女

首先要确定sign是干什么的。sign的主要目的是保证数据的完整性,防止在网络传输的过程中篡改数据。name=kevinheight=170key=$$key$$假如上面的数据签名字符串是 name=kevin&height=170$$key$$ 签名结果是 c5c05d54d25791b0551b25a482d8c2e2。这个 key 在客户端是可见,别人也可以轻易拿到这个参数。但是拿到这个key又有什么意义呢?因为key是不会在网络中进行传输的,所以服务器最终生成签名的key还会是使用$$key$$,即使你修改了数据,也修改了客户端的key但是你没有修改掉服务器的key,最后服务器还会按照自己的方式生成sign。如果你修改了数据,最终也只是签名结果不一致而已。

守着一只汪

sign里存放的都是保密信息,比如用户的id或者其它用于验证api合法性的参数接口的请求参数一般是不放在sign里的,直接明文传输用https加密通信过程就可以sign是服务端加密后传给客户端存放,在请求api时带到服务端验证身份合法性的,里面不会有接口的请求信息,这两个是要分开的
打开App,查看更多内容
随时随地看视频慕课网APP