文章目录

  • 前言
  • 一、什么是动态令牌?
  • 二、使用的Jar包
    • 1. 生成二维码Jar包
    • 2. Apache Commons Codec
    • 3. 项目工具类
    • 4. 下载链接
  • 三、IDEA导入外部Jar包
  • 四、代码测试
    • 1. 生成OTPAUTH协议等信息
    • 2. 微信小程序扫描结果
    • 3. 测试口令是否正确
  • 总结

前言

说到帐号安全,当下国内很多网络服务例如银行、游戏、淘宝等 ,除了正确的帐号密码之外,常常还需要额外给你发一条手机短信验证码,以此进一步确认你是帐号的真正主人,这就是两步验证的一种实现方式。本次的任务内容就是使用Java模拟二次验证码(动态令牌)是如何进行实现,在模拟的过程中我明白了二次验证码(也叫两步验证)的实现原理,在此进行记录。

任务描述:生成唯一的64位密钥并将密钥保存下来便于之后的测试,通过密钥来实现每隔一段时间就变化一次的动态数字,创建账户信息并且生成OTPAUTH协议字符串链接的二维码,使用微信小程序或支付宝小程序搜索:二次验证码,使用小程序扫描该二维码,如果扫描成功,则会看到动态令牌出在了手机上并且会有圆圈显示倒计时失效的进度提示,将出现的动态令牌在Java程序中与通过当前密钥生成的二次验证码进行对比,验证动态生成的二维码是否正确。


提示:以下是本篇文章正文内容,下面案例可供参考

一、什么是动态令牌?

动态口令是根据专门的算法生成一个不可预测的随机数字组合,一个密码使用一次有效,被广泛运用在网银、网游、电信运营商、电子政务、企业等应用领域。 动态口令是一种安全便捷的帐号防盗技术,可以有效保护交易和登录的认证安全,采用动态口令就无需定期修改密码,安全省心,从而在最基本的密码认证这一环节保证了系统的安全性。解决因口令欺诈而导致的重大损失,防止恶意入侵者或人为破坏,解决由口令泄密导致的入侵问题。 动态令牌即是用来生成动态口令终端。

和短信验证码一样道理,本文的动态令牌也是两步验证中的一种,也是相当于给帐号多加了一次验证,除了在输入正确的账号和密码之外,用户同样还需要额外输入一个每隔一段时间就会自动变化一次的6位数字(两步验证码)才能完成登录或其它功能。所以即使用户的帐号和密码不慎泄露了,别人在没有这个数字验证码时也是无法登录到被泄露信息的用户的账号的,这可以大大提高破解的难度和帐号的安全性


二、使用的Jar包

1. 生成二维码Jar包

这里我将com.google.zxing的二维码生成工具进行了封装,只留下了一个方法接口make方法

2. Apache Commons Codec

这个jar包当中使用到的类有实现Base32和Base64编码的两个工具类

3. 项目工具类

使用到的工具类中主要用到的有湘王老师给的四个工具类:

  1. 十六进制编码工具类
  2. Base32编码工具类
  3. 生成OTPAUTH协议等各种参数的工具类

4. 下载链接

下载链接:https://pan.baidu.com/s/1P2NWKClHXAj7TRFzAlc5Bg
提取码:xhzy


三、IDEA导入外部Jar包




四、代码测试

1. 生成OTPAUTH协议等信息

package com.shijimo.token;import com.shijimo.token.util.OTPAuthUtil;
import qr.CreateQR;public class Main {public static void main(String[] args) {// write your code hereSystem.out.println("Hello,World!");// 生成64位密钥String secretKey = OTPAuthUtil.generateSecret(64);System.out.println("生成动态密钥:" + secretKey);// 生成账户名String account = "YkForever";// 生成OTP协议的路径String totpURI = OTPAuthUtil.generateTotpURI(account, secretKey);System.out.println("生成的协议路径为:" + totpURI);CreateQR.make(350,350,totpURI,"D:/qr.png");}
}

在这里生成了64位密钥、OTPAUTH的账户名字和协议路径以及二维码的存储地址

2. 微信小程序扫描结果


将账户添加到小程序中后会有口令的显示

3. 测试口令是否正确

package com.shijimo.token;import com.shijimo.token.util.OTPAuthUtil;import java.util.Scanner;/*** @author Dream_飞翔* @date 2021/10/29* @time 22:16* @email 1072876976@qq.com*/
public class TestToken {public static void main(String[] args) {// 动态验证生成的口令是否正确String secret = "自动生成的64位密钥";// 小程序中显示的动态令牌String code = "716471";boolean result = OTPAuthUtil.verify(secret, code);System.out.println("动态口令是否正确:" + result);}
}

动态令牌(二次验证码)测试成功


总结

以上便是二次验证码的实现过程,相较于短信验证码来说,手机短信验证码和两步验证的目的和作用基本一致,不过很多的 (国外) 网络服务并不支持发送手机短信验证码,主要是短信成本高,而且有安全性风险 (比如 2G 网络下黑客可以利用 GSM 漏洞监听截取到用户的手机号码和短信内容)。而本文所说的二步验证是指虚拟 MFA,或者说是“身份验证器”,是基于时间和加密算法生成“每 30 秒变化一次的 6 位数字验证码”,也叫做 TOTP (Time-Based One-time Password) 或 OTP 一次性密码。它的优点是使用时无需联网、仅需时间进行计算、速度快、可离线使用、没有额外成本、算法协议公开通用,开发和使用上都很简单,可以用小型硬件 (实体的密码器) 或纯软件 APP 来实现,因此更多的网站会支持这种方式。

CSDN实训 - Java模拟二次验证码(动态令牌)相关推荐

  1. CSDN实训第四天(OTP——动态令牌的实现)

    CSDN实训第四天(OTP--动态令牌的实现) 一.前言 出于对重要文件的保护,产生了 密码 和验证码这一产物.如今验证码有很多形式,Gif动画验证码.手机短信验证码.手机语音验证码.视频验证码等等, ...

  2. [14-2] JAVA文件操作实训之模拟记事本Notepad

    本文部分内容引用<JAVA基础案例教程>-黑马程序员 第14次-文件操作之字节流和字符流实训-task02文件操作实训之模拟记事本-贪吃的钊钊黑. 指导老师:范畅 一.任务描述 编写一个模 ...

  3. 实训课教案二:计算机软件安装初步

    实训课教案二:计算机软件安装初步 实训内容:计算机操作系统安装之前的 CMOS设置和磁盘分区格式化 实训课时:2课时 实训地点:计算机组装与维护实验室 实训目的: 1.掌握CMOS的基本设置. 2.能 ...

  4. 计算机控制电梯如需改变功能 则,电梯维修项目教程 教学课件 作者 孙文涛附加答案试卷综合实训三模拟试题(13).doc...

    PAGE 5 深圳高级技工学校2011-2012学年第二学期 <电梯综合实训三>理论模拟试题(13) : 号 学 : 级 班 : 名 姓 ┄ ┄ ┄ ┄一一 ┄ ┄┄ ┄┄┄ 线 此 过 ...

  5. 图像识别_2010暑期实训有感【二】

    还是好好谈谈项目方面的吧.我们一个小组12人,算是人数比较多的了.这个项目还是比较大的,而且时间比较紧,总共20天,中间每周日休息,所以剩下的也就不足20天时间了.况且前期还有培训,会耽误一些时间.所 ...

  6. 实训记录(二)——分镜的制作!

    一回生二回熟,有了第一次,就会有第二次! 今天写的内容主要是有了剧本之后的下一步操作呢,那!当!然!就!是!出!分!镜!啦! 其实我们专业在大二的时候(忘了说啦,我们小组成员在大三之前至少都是数字媒体 ...

  7. java ean13 计算_实训java第三课 for 逻辑运算符 条件判断 商品条形码Ean-13验证码生成...

    package com.tarena.day03; public class SwitchDemo { /** * Switch */ public static void main(String[] ...

  8. java实训项目-模拟自动挡汽车

    Java程序设计课程设计项目名称 项目名称:自动挡汽车操作模拟系统的设计与实现 英文名称:Design and Implementation of Operation Simulation Syste ...

  9. CSDN实训 - 通过Java修改游戏存档

    文章目录 前言 一.实现思路 二.项目准备 1. 创建maven工程 2. 导入依赖 ①. JSON依赖 ②. Lombok依赖 ③. Junit4单元测试 三.核心代码 1. 使用的对象 2. 读取 ...

最新文章

  1. 收藏 | 有哪些相见恨晚的科研经验?
  2. java开发企业级权限管理系统_Java开发企业级权限管理系统 视频教程
  3. python中fit内参数的类型_Python fit
  4. 牛客 - 捡金币(思维+二维前缀和+构造)
  5. 米莱狄机器人怎么那么多_米莱狄究竟应该怎么玩?
  6. STM8L101和STM8S103差异对比
  7. httpClient发送post请求,带header、body的工具类
  8. 揭秘淘宝286亿海量图片存储与处理架构,海量小文件存储的解决方案
  9. shell脚本shc加密解密
  10. windows7内存诊断工具有用吗_用Windows内存诊断工具检查内存可靠性
  11. 博通 bcmdhd 网卡驱动分析
  12. 《Word中从正文开始设置页码》
  13. css最后一行省略号,CSS怎么实现单行、多行文本溢出显示省略号
  14. 403 forbidden 错误解决方案
  15. 中企海外周报 | 哈弗F7x性能版在俄罗斯上市;徐工首家海外银行落户巴西
  16. 软件设计师提纲+复习资料整理(上午题)
  17. 好好说话之Tcache Attack(2):tcache dup与tcache house of spirit
  18. 驱动程序获取微软数字签名的方法
  19. Ubuntu云安装桌面版
  20. 实用功能#用Python给你的微信升升级吧

热门文章

  1. python text函数_python可视化text()函数使用详解
  2. 【腾讯Bugly干货分享】从0到1打造直播 App
  3. 射频和无线技术入门--传统技术--7
  4. 洛谷P3374 树状数组模版1
  5. AI在零售业的五大应用场景:消费者喜欢苹果时,不要给他一箱梨
  6. 计算机开机键英语字母,电脑开机黑屏显示英文字母
  7. 万分之二用百分之怎么表示_百分比表示什么 什么是百分之多少是怎么算的?...
  8. python垃圾邮件识别_Python 手写朴素贝叶斯分类器检测垃圾邮件/短信
  9. js 导出excel,设置下载的标题
  10. validation 分组校验注解大全及使用详解