最近在开发一款android app, 因为需求的需要, app使用tcp和服务器保持长连接, 然后用户在操作时通过tcp发送指令及数据(键值对)到服务器, 比如添加分组这一类的操作, 那么在对用户的操作有进行后台权限验证的情况下, 除了用户登录和注册时的账号密码以外, 我们是否有必要对发送的数据(即指令和数据)进行加密呢?一般什么样的数据需要加密呢?
最近在开发一款android app, 因为需求的需要, app使用tcp和服务器保持长连接, 然后用户在操作时通过tcp发送指令及数据(键值对)到服务器, 比如添加分组这一类的操作, 那么在对用户的操作有进行后台权限验证的情况下, 除了用户登录和注册时的账号密码以外, 我们是否有必要对发送的数据(即指令和数据)进行加密呢?一般什么样的数据需要加密呢?
加密是有必要的,特别是用户使用公开 WIFI 热点的情况下,通信内容很可能被第三方窃听。加密的方式,一般用 SSL 就可以(即服务器使用 HTTPS 来提供接口调用),当然你也可以用 Java 提供的其他加密方式。顺便说下长连接是手机 APP 大忌啊。
1) 如果你们的app是基于H5开发的,则有可能你们的页面经过运营商的时候,被运营商插入一些乱七八糟的广告,当然如果你们的app是基于SDK的,则没有这个问题。
2)数据如果没有加密,则只要经过路由器的时候,就有可能被人用抓包软件逆向看到你的用户名和密码。加密之后你的通信是基于SSL隧道的,所有的数据是端到端加密的,因此不存在这个问题。
15 回答8.4k 阅读
8 回答6.2k 阅读
1 回答4k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答3.8k 阅读
3 回答1.7k 阅读✓ 已解决
有必要加密的,WiFi网络链路完全不可信,不加密的话你的整个业务都暴露出去了,中间人劫持重放伪等造安全问题,很容易把你的系统搞坏。加密属于底层的东西,如果你现在不设计进去,以后发现不得不加密的时候再来加密就相当麻烦了。
我经历过这样的项目,做的专用Android PDA上的程序,甲方要求对TCP加密的并且长连接,最后用了SSL来完成的,客户端和服务器端用证书来通信就行了。
推荐你用SSL,好处是现成的,而且免费,问题不多,遇到问题了也容易搜找到解决方案。你不用去考虑怎么来加密,都是用的现成的东西,从SDK和key生成都直接用。前期测试开发的时候可以不加密,最后成型之后再把SSL加上去就行。
依我个人经历而言,你的最大问题其实不是加密,长连接的地方估计会花你更多精力,长连接如果能不用就去了吧。