java 双因素认证(2FA)TOTP demo

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/485476.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

win7计算机管理中看不到新加的硬盘,win7系统看不到第二块硬盘的解决方法.

win7系统想必大家都非常熟悉吧&#xff0c;然而有时候可能会碰到win7系统看不到第二块硬盘的情况&#xff0c;想必大家都遇到过win7系统看不到第二块硬盘的情况吧&#xff0c;那么应该怎么处理win7系统看不到第二块硬盘呢&#xff1f;我们依照1、进入win7系统控制面板&#xff…

美国航空发动机发展经验,给中国的启示!

内容来源&#xff1a;网络本期编辑&#xff1a;小艾 航空发动机是装备制造领域的最高端产品&#xff0c;代表了装备制造业的最高技术水平&#xff0c;被誉为现代工业“皇冠上的明珠”&#xff0c;其重要性一向为人所强调&#xff0c;但成为航空发动机强国的道路之艰难却往往为人…

session的钝化和活化

钝化&#xff1a;内存->硬盘 活化&#xff1a;硬盘->内存 session对象的四种状态&#xff1a; 1.session.setAttribute("a",xxx),将对象a绑定到session中 2.session.removeAttribute("a")&#xff0c;将对象a从session中解绑 监听session对象的…

华师 计算机系统 作业,华师网络学院作业答案-计算机组成原理问答题

华师网络学院作业答案-计算机组成原理问答题 (4页)本资源提供全文预览&#xff0c;点击全文预览即可全文预览,如果喜欢文档就下载吧&#xff0c;查找使用更方便哦&#xff01;9.9 积分试谈谈什么是存储系统的高速缓冲存储器(Cache)&#xff0c; 画出“主存- Cache”这一存储层次…

第五十四篇 Linux相关——远程连接SSH

No.1. SSH&#xff08;Secure Shell&#xff09;安全外壳协议建立在应用层基础上的安全协议可靠&#xff0c;专为远程登录会话和其他网络服务提供安全性的协议有效防止远程管理过程中的信息泄漏问题SSH客户端适用于多种平台SSH服务器端几乎支持所有Unix平台No.2. 服务器安装SSH…

《2020城市大脑全球标准研究报告》全文正式开放申领

2020年12月23日&#xff0c;《2020城市大脑全球标准研究报告》在北京正式发布&#xff0c;提出了城市大脑建设标准的研究方向和初步成果&#xff0c;内容包括&#xff1a; 城市大脑的顶层建设规范、整体技术架构、云反射弧机制、运行安全、城市神经元的种类划分、识别编码、空…

Leetcode--91. 解码方法

一条包含字母 A-Z 的消息通过以下方式进行了编码&#xff1a; A -> 1 B -> 2 ... Z -> 26 给定一个只包含数字的非空字符串&#xff0c;请计算解码方法的总数。 示例 1: 输入: "12" 输出: 2 解释: 它可以解码为 "AB"&#xff08;1 2&#xff0…

测试动态视力软件叫什么影响吗,动态视力

动态视力是指眼睛在观察移动目标时&#xff0c;捕获影像、分解、感知移动目标影像的能力&#xff0c;是一种知觉运动物体细节的能力。这种能力伴随着通过动态视力捕捉影像和短时间内大脑信息处理的过程以及机体的相应的反应过程。中文名动态视力外文名Dynamicvisual acuity应用…

学科交叉是科学发展的必然趋势

来源&#xff1a;学习时报作者&#xff1a;李侠2020年10月30日&#xff0c;据国家自然科学基金委员会官网发布消息&#xff0c;基金委成立第九大学部——交叉科学部&#xff0c;这也是国家自然科学基金委时隔11年再次成立新的科学部。紧接着&#xff0c;2021年1月&#xff0c;国…

Leetcode--923. 三数之和的多种可能

给定一个整数数组 A&#xff0c;以及一个整数 target 作为目标值&#xff0c;返回满足 i < j < k 且 A[i] A[j] A[k] target 的元组 i, j, k 的数量。 由于结果会非常大&#xff0c;请返回 结果除以 10^9 7 的余数。 示例 1&#xff1a; 输入&#xff1a;A [1,1,2…

nas磁盘用什么软件测试,手把手教你从NAS拿点空间当电脑硬盘使用 iSCSI开启网络硬盘共享...

手把手教你从NAS拿点空间当电脑硬盘使用 iSCSI开启网络硬盘共享2019-10-23 10:10:2095点赞1581收藏182评论前言家里的Synology DS218Play 已经用了几年了&#xff0c;当时买的两盘位DS 218PLAY&#xff0c;一直使用状况良好。跟路由器一样&#xff0c;只需要默默地工作在角落就…

深度学习?不一定非得搞“黑箱”

来源&#xff1a;TechTalks作者&#xff1a;Ben Dickson编译&#xff1a;科技行者深度神经网络的参数网络极其庞大复杂&#xff0c;也因此让机器得以实现以往难以想象的各类功能。然而&#xff0c;这种复杂性也成为制约其广泛应用的祸根&#xff1a;神经网络的内部工作机理一直…

Leetcode--904. 水果成篮

在一排树中&#xff0c;第 i 棵树产生 tree[i] 型的水果。 你可以从你选择的任何树开始&#xff0c;然后重复执行以下步骤&#xff1a; 把这棵树上的水果放进你的篮子里。如果你做不到&#xff0c;就停下来。 移动到当前树右侧的下一棵树。如果右边没有树&#xff0c;就停下来…

[No000014A]Linux简介与shell编程

Linux 介绍 内核 库: .so 共享对象&#xff0c;windows&#xff1a;dll 动态链接库 应用程序 Linux的基本原则&#xff1a; 1、由目的单一的小程序组成&#xff1b;组合小程序完成复杂任务&#xff1b; 2、一切皆文件&#xff1b; 3、尽量避免捕获用户接口&#xff1b; 4、配置…

计算机丢失first,求大神解答硬盘驱动丢失怎么办

某蛋的piglet桑回答数&#xff1a;14533 | 被采纳数&#xff1a;52016-12-23 12:51:05一、U盘重装系统准备&#xff1a;一台正常开机的电脑和一个U盘1、百度下载“U大师”(老毛桃、大白菜也可以)&#xff0c;把这个软件下载并安装在电脑上。2、插上U盘&#xff0c;选择一键制…

Leetcode--49. 字母异味词分组

给定一个字符串数组&#xff0c;将字母异位词组合在一起。字母异位词指字母相同&#xff0c;但排列不同的字符串。 示例: 输入: ["eat", "tea", "tan", "ate", "nat", "bat"], 输出: [ ["ate",&quo…

Reading SBAR SDN flow-Based monitoring and Application Recognition

概要 在sdn下&#xff0c;控制平面基于网络测量的的数据控制网络&#xff0c;而细粒度的管理得益于细粒度的测量数据。针对sdn环境下的细粒度测量&#xff08;识别具体应用程序&#xff09;&#xff0c;可以实现对细粒度的流量管控。设计了识别系统SBAR&#xff0c;对数据流进行…

有关增强现实技术的过去、现在和未来的发展

来源&#xff1a;贤集网增强现实已经从科幻电影中跃升为基于科学的现实。早些时候&#xff0c;增强现实技术的使用成本很高&#xff0c;因此很少使用增强现实技术。研究人员没有机会经常尝试增强现实。但是今天&#xff0c;情况发生了变化。增强现实通过智能手机&#xff0c;个…

计算机改成服务器,旧电脑主机如何改成服务器

弹性云服务器 ECS弹性云服务器(Elastic Cloud Server)是一种可随时自助获取、可弹性伸缩的云服务器&#xff0c;帮助用户打造可靠、安全、灵活、高效的应用环境&#xff0c;确保服务持久稳定运行&#xff0c;提升运维效率三年低至5折&#xff0c;多种配置可选了解详情用户数据注…

Leetcode--438. 找到字符串中所有字母异位词

给定一个字符串 s 和一个非空字符串 p&#xff0c;找到 s 中所有是 p 的字母异位词的子串&#xff0c;返回这些子串的起始索引。 字符串只包含小写英文字母&#xff0c;并且字符串 s 和 p 的长度都不超过 20100。 说明&#xff1a; 字母异位词指字母相同&#xff0c;但排列不…