zoukankan      html  css  js  c++  java
  • 仿新浪微盾客户端项目简介三

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

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

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

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

    2. 静态密钥。
    加密后静态密钥保存在本地,加密算法为DES,一种对称加密算法,支持加密解密密钥 = 固定字符串 + 设备IMEI号码
    这个解密的密钥有什么作用了,是用于微盾两边安全性的提升了。这就引出一个话题,密钥的作用。公钥加密,保存在客户端 很多个,用户知道。私钥解密,保存在服务器 只有一个,只有服务器知道。这种不对称加密的方式,大大的提升了破解难度。至于大家认为,设备的IMEI号是不是多此一举,在以后我会专门用一篇文章论述,这里,就不做过多的赘述了。
    有了这两点的分析,我们有了一个完美的设计方案:
    有了准确的服务器时间和静态密钥,就能计算出正确的6位动态密码
    当用户输入动态密码登录时,服务器会使用同样的时间和密钥算出6位密码进行比对。
    服务器做了容错处理,会计算出在某个时刻前1分钟和后一分钟的所有6位密码,只要用户输入正确了其中一个,就算通过.
    至于这个方法具体代码,我准备是在Google一个开源项目Google Authenticator 修改。
    下面的课程,我们将进入具体的源代码的说明。
    用了3节的篇幅,说明了微盾概要设计和技术实现,不知道大家明白没,请给予反馈。
  • 相关阅读:
    java.sql.SQLException: The server time zone value is unrecognized or represents more than one time zone
    MySQL
    C# 简单软件有效期注册的实现【原】
    【转】Flask and PostgreSQL on Heroku
    5个提问,详细介绍北极星指标的策略框架 | 人人都是产品经理
    DingDing CRM
    Mariadb & MySQL :: MySQL 5.7 Reference Manual :: 8.2.1.17 LIMIT Query Optimization
    IT从之“CRM”与“OA”
    maven
    中国网络安全企业100强报告
  • 原文地址:https://www.cnblogs.com/manuosex/p/3577050.html
Copyright © 2011-2022 走看看