TOTP 的全称是"基于时间的一次性密码"(Time-based One-time Password)。它是公认的可靠解决方案,已经写入国际标准 RFC6238。
很早就知道有这个东西了,一直不知道是怎么实现的.
比如 QQ 安全中心的密钥,U盾,就是动态密码之类的.
今天看到阮一峰老师的博客才知道实现原理.
概念性的东西参考
http://www.ruanyifeng.com/blog/2017/11/2fa-tutorial.html
实现代码:

package totp;import java.security.MessageDigest;
import java.util.Date;
import java.util.UUID;
import java.util.regex.Matcher;
import java.util.regex.Pattern;public class TOTP {// TC = floor((unixtime(now) − unixtime(T0)) / TS)// TC = floor(unixtime(now) / 30)// TOTP = HASH(SecretKey, TC)private static final char[] HEX_DIGITS = "0123456789abcdef".toCharArray();public static void main(String[] args) {Pattern pattern = Pattern.compile("\\d");String key = UUID.randomUUID().toString().replace("-", "");for (int i = 0; i < 70; i++) {String TC = String.valueOf((int) Math.floor(new Date().getTime() / 1000 / 30));String TOTP = sha1(TC + key);Matcher matcher = pattern.matcher(TOTP);String result = "";while (matcher.find()) {result += matcher.group();}result = result.substring(result.length() - 6);System.out.println(i + "  --  " + result);try {Thread.sleep(1000);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}public static String sha1(String srcStr) {return hash("SHA-1", srcStr);}public static String hash(String algorithm, String srcStr) {try {MessageDigest md = MessageDigest.getInstance(algorithm);byte[] bytes = md.digest(srcStr.getBytes("utf-8"));return toHex(bytes);} catch (Exception e) {throw new RuntimeException(e);}}public static String toHex(byte[] bytes) {StringBuilder ret = new StringBuilder(bytes.length * 2);for (int i = 0; i < bytes.length; i++) {ret.append(HEX_DIGITS[(bytes[i] >> 4) & 0x0f]);ret.append(HEX_DIGITS[bytes[i] & 0x0f]);}return ret.toString();}
}

转载于:https://www.cnblogs.com/mysgk/p/9427246.html

java 双因素认证(2FA)TOTP demo相关推荐

  1. 双因素认证(2FA)工作原理简介

    什么是双因素认证(Two-factor authentication,简称 2FA) 双因素身份认证就是:通过你所知道再加上你所能拥有的,这二个要素组合到一起才能发挥作用的身份认证系统.双因素认证是一 ...

  2. 3天时间,如何用双因素认证帮5000名员工实现远程办公账号安全

    远程办公最早在上世纪80年代的硅谷流行.在疫情仍在全球肆虐的当下,远程办公方式受到众多企业的推崇.对于一些集团化或多分支机构的企业组织,员工通过VPN.云桌面.虚拟化桌面等方式远程访问总部内网资源已成 ...

  3. 【IoT】加密与安全:双因素认证(2FA):TOTP

    认证(authentication)就是确认用户的身份,是网站登录必不可少的步骤.密码是最常见的认证方法,但是不安全,容易泄露和冒充. 基于安全认证,很多场景要求启用双因素认证(Two-factor ...

  4. 业余草双因素认证(2FA)教程

    所谓认证(authentication)就是确认用户的身份,是网站登录必不可少的步骤. 密码是最常见的认证方法,但是不安全,容易泄露和冒充. 越来越多的地方,要求启用双因素认证(Two-factor ...

  5. 双因素认证(2FA)

    转自:  http://www.ruanyifeng.com/blog/2017/11/2fa-tutorial.html 所谓认证(authentication)就是确认用户的身份,是网站登录必不可 ...

  6. 双因素认证(2FA)教程

    所谓认证(authentication)就是确认用户的身份,是网站登录必不可少的步骤. 密码是最常见的认证方法,但是不安全,容易泄露和冒充. 越来越多的地方,要求启用双因素认证(Two-factor ...

  7. 关于双因素认证(2FA),这些基础知识你一定要知道

    如今,在线时间占据了生活的一大部分.远程工作.社交媒体人气的激增以及元宇宙的出现意味着如今的数字身份与现实身份一样重要,而维护数字身份安全也变得更加重要. 双因素认证(2FA)作为额外安全层为账号登录 ...

  8. 九州云腾双因素认证系统_“等保2.0”新标准落地 双因子认证(2FA)成标配...

    2019年5月13日,国家标准新闻发布会正式发布网络安全等级保护制度2.0标准(以下简称"等保2.0"),新标准将于2019年12月1日开始实施,这意味着"等保2.0&q ...

  9. ASP.NET Core 双因素验证2FA 实战经验分享

    必读 本文源码核心逻辑使用AspNetCore.Totp,为什么不使用AspNetCore.Totp而是使用源码封装后面将会说明. 为了防止不提供原网址的转载,特在这里加上原文链接: 双因素认证 双因 ...

最新文章

  1. 程序实现switch语句判断年龄_【回顾】(选择执行语句if else和switch)乐创DIY C语言讲义——3.8节(4)...
  2. [spring]Attribute scope must be declared for element type bean
  3. 分区数据导出功能(页面调整)
  4. 制作程序化装饰花纹图案_装饰图案
  5. 极光推送java服务器端_极光推送服务器端(JAVA)
  6. 微软OneDrive使用体验
  7. 宏碁电脑怎么快速重装Win11系统?
  8. rat linux安装u盘,美加狮RAT2鼠标驱动
  9. win10中conda activate激活环境出错的解决办法
  10. c语言 运行结果是空白的,为什么输出是空白
  11. 腾讯开源 Kotlin 高性能特效动画组件!
  12. ambari-server HA
  13. Modeling Task Relationships in Multi-task Learning withMulti-gate Mixture-of-Experts
  14. dya6 列表的相关函数
  15. 在华为手机上玩OPPO游戏
  16. 分享35个ASP源码,总有一款适合您
  17. ORA-38104: 无法更新 ON 子句中引用的列
  18. 字符串拼接函数的实现(简易版)
  19. [ivo UI] 适合初学者的HTML5 UI组件库
  20. 2013年上半年系统集成项目管理工程师(软考)培训视频、资料、历年试题、电子书教程

热门文章

  1. 十八、PHP框架Laravel学习笔记——模型的增删改
  2. LeetCode 1521. 找到最接近目标值的函数值(位运算)
  3. LeetCode MySQL 1741. 查找每个员工花费的总时间
  4. Scala 入门2(数组、List、Set、Map、元组、Option、Iterator)
  5. LeetCode 911. 在线选举(二分查找)
  6. LeetCode 302. 包含全部黑色像素的最小矩形(BFS)
  7. LeetCode 484. 寻找排列(找规律+贪心)
  8. LeetCode 945. 使数组唯一的最小增量(贪心)
  9. 逻辑斯谛回归模型( Logistic Regression,LR) 最大熵模型(Max Entropy,ME)
  10. LeetCode 861. 翻转矩阵后的得分(贪心)