需求

限制App的使用,使App仅仅能在有许可的设备上执行。

分析及解决方式

原理

让App在每次执行的时候都连接server进行合法性验证——当然是一个非常成熟可靠的方案。

可是这样做的局限也是每次都须要连接server,对一些不须要联网或者仅仅连局域网的内部应用来说就太不可行了——服务端验证不可行的话就仅仅能在client验证了。

一种client验证方法的基本原理:

  1. 取一个唯一的设备号A。

  2. 在client依据一个加密算法f(A)算出一个许可号B。
  3. 要求用户输入一个许可号C(Licence),与B进行比較,完毕验证。

具体

  1. 设备号A能够是序列号(Serial Number)、MAC地址、蓝牙地址、ANDROID_ID等等。
  2. 加密算法f(x)从A->B的变换能够使用md5、字符串大写和小写变换、字符串增删、顺序变化等各种变换的组合。可是最好要满足两个条件:
    • 结果唯一:这个是必须条件,是验证可靠性的保证。

    • 过程不可逆:这个非必须的,可是最好如此,能够添加破译的难度。
  3. 将用户的输入的Licence保存到client——仅仅须要输入一次。
  4. Android的验证能够放在首个启动的Activity的OnResume方法中,或者直接放在Applaction的onCreate方法中。

  5. 条件同意的情况下,能够使用服务端和client的双重验证,以保证Licence的正确性。


http://www.barryzhang.com/archives/377


同步发表在 http://www.barryzhang.com/archives/188

广告一下我的新博客,欢迎訪问哈~:BarryZhang.com

最新文章

  1. Some thing about Graph
  2. SQL Server代理(4/12):配置数据库邮件
  3. 菜鸟学习笔记4——jquery事件
  4. Sina App Engine(SAE)入门教程(3)-KVDB使用
  5. 利用正则表达式作为string.split seprator
  6. hdoj 1087 (DP)
  7. IIS not allow PUT and DELETE method
  8. 如何借助Motion操控Linux监控摄像头
  9. HTML中<input>參数,以及文本输入框,文本域的解说
  10. JDBC访问数据库
  11. JS脚本检查密码强度
  12. WPF中的Command事件绑定
  13. win-DOS命令整理
  14. CoCos2dx开发:tile地图绘制和Tiled工具的基本使用
  15. echarts绘制k线图为什么写candlestick类型就报错
  16. Netty实战八之引导
  17. CentOS和Redhat单用户模式
  18. Gravitational Teleport简单使用
  19. prime docker-compose 环境运行试用
  20. 廖雪峰Java2面向对象编程-4抽象类和接口-2接口

热门文章

  1. lfyzoj104 Counting Swaps
  2. 【php学习之路】微信公众帐号
  3. 二丶人生苦短,我用python【第二篇】
  4. wordpress 使用jquery需要主要的问题
  5. 如何修改 WordPress 的默认 Gravatar 头像
  6. mysql无法创建外键问题
  7. 2013年EI收录的中国期刊
  8. linux虚拟机无法上网 Network is unreachable
  9. zoj 3812 We Need Medicine (dp 状压)
  10. Yii 之控制器响应