当前位置: 首页 > news >正文

仿新浪微盾客户端项目简介三

上节我们说到,关于opt算法的说明,也说到这个项目是使用TOTP(基于时间)方法。  

这节讲的主要把它怎么整合项目中。整合项目中,此算法需要注意这么几点。

1. 与服务器端统一的准确时间
由于是使用totp算法,客户端与服务器端的算法是必须要保存一致的。

对时接口,获取服务器端准确时间,返回{“svr_time”:1319512158},以秒为单位的时间戳。时间偏移量 = 本地时间 – 服务器端时间, 将时间偏移量保存在地SharePreference中,供计算动态密码时读取服务器端时间 = 本地时间 - 时间偏移量使用时间偏移量的好处是:只需要从服务器获取一次时间,以后都可以离线使用微盾。

2. 静态密钥。
加密后静态密钥保存在本地,加密算法为DES,一种对称加密算法,支持加密解密密钥 = 固定字符串 + 设备IMEI号码
这个解密的密钥有什么作用了,是用于微盾两边安全性的提升了。这就引出一个话题,密钥的作用。公钥加密,保存在客户端 很多个,用户知道。私钥解密,保存在服务器 只有一个,只有服务器知道。这种不对称加密的方式,大大的提升了破解难度。至于大家认为,设备的IMEI号是不是多此一举,在以后我会专门用一篇文章论述,这里,就不做过多的赘述了。
有了这两点的分析,我们有了一个完美的设计方案:
有了准确的服务器时间和静态密钥,就能计算出正确的6位动态密码
当用户输入动态密码登录时,服务器会使用同样的时间和密钥算出6位密码进行比对。
服务器做了容错处理,会计算出在某个时刻前1分钟和后一分钟的所有6位密码,只要用户输入正确了其中一个,就算通过.
至于这个方法具体代码,我准备是在Google一个开源项目Google Authenticator 修改。
下面的课程,我们将进入具体的源代码的说明。
用了3节的篇幅,说明了微盾概要设计和技术实现,不知道大家明白没,请给予反馈。

相关文章:

  • IIS提示“异常详细信息: System.Runtime.InteropServices.ExternalException: 无法执行程序”...
  • linux 公网主机被***了
  • 【Mysql 学习】 MERGE表方面的问题(二)
  • win8 开发之旅(7) --五子棋游戏开发
  • java中的String类型(不知道理解的好不,请教大神)
  • leetcode 237 Delete Node in a Linked List python
  • 【转】Java 项目UML反向工程转化工具
  • 新一代编程:scala泛函编程技术-唠叨
  • 音乐还在陪伴我
  • RTB业务知识之2-Impression概念和关键属性
  • 触摸事件之响应者链验证
  • imx6 PCIE使能加载ath9k无线网卡
  • 深入理解SQL的四种连接-左外连接、右外连接、内连接、全连接(转载)
  • 聚焦“裂变”,又拍云推出直播云等多场景解决方案
  • Nginx负载平衡 + Tomcat + 会话存储Redis配置要点
  • canvas 高仿 Apple Watch 表盘
  • IE报vuex requires a Promise polyfill in this browser问题解决
  • php面试题 汇集2
  • Python 反序列化安全问题(二)
  • 创建一种深思熟虑的文化
  • 基于Dubbo+ZooKeeper的分布式服务的实现
  • 名企6年Java程序员的工作总结,写给在迷茫中的你!
  • 如何将自己的网站分享到QQ空间,微信,微博等等
  • 怎么把视频里的音乐提取出来
  • 东超科技获得千万级Pre-A轮融资,投资方为中科创星 ...
  • #mysql 8.0 踩坑日记
  • #常见电池型号介绍 常见电池尺寸是多少【详解】
  • #使用清华镜像源 安装/更新 指定版本tensorflow
  • (2009.11版)《网络管理员考试 考前冲刺预测卷及考点解析》复习重点
  • (a /b)*c的值
  • (Spark3.2.0)Spark SQL 初探: 使用大数据分析2000万KF数据
  • (附源码)基于SSM多源异构数据关联技术构建智能校园-计算机毕设 64366
  • (附源码)计算机毕业设计SSM疫情居家隔离服务系统
  • (转)jdk与jre的区别
  • (轉)JSON.stringify 语法实例讲解
  • ***php进行支付宝开发中return_url和notify_url的区别分析
  • .net framework4与其client profile版本的区别
  • .NET 简介:跨平台、开源、高性能的开发平台
  • .NET/ASP.NETMVC 大型站点架构设计—迁移Model元数据设置项(自定义元数据提供程序)...
  • /usr/lib/mysql/plugin权限_给数据库增加密码策略遇到的权限问题
  • @param注解什么意思_9000字,通俗易懂的讲解下Java注解
  • [ solr入门 ] - 利用solrJ进行检索
  • [20180312]进程管理其中的SQL Server进程占用内存远远大于SQL server内部统计出来的内存...
  • [AIGC] Spring Interceptor 拦截器详解
  • [BUUCTF]-PWN:[极客大挑战 2019]Not Bad解析
  • [CC2642r1] ble5 stacks 蓝牙协议栈 介绍和理解
  • [go] 策略模式
  • [HOW TO]怎么在iPhone程序中实现可多选可搜索按字母排序的联系人选择器
  • [leetcode]Symmetric Tree
  • [LeetCode]-使用特殊算法的题目-2
  • [MSSQL]GROUPING SETS,ROLLUP,CUBE初体验
  • [No000010F]Git8/9-使用GitHub
  • [Oh My C++ Diary]#ifndef / #define / #endif 使用详解
  • [one_demo_9]判断数组是否递增
  • [python]PyPI使用国内源