流程

*
* 1、平台端生成32位秘钥 ,然后将秘钥和用户账户对应关系存到自己的数据库
*
* 2、用户端使用《谷歌身份验证器》添加账户并配置第一步给出的秘钥 (每个用户要有独立秘钥,不能重复)
*
* 3、用户登录时候输入账户、密码、谷歌验证码 ;后台根据账户查询出秘钥,然后反解析得出当前动态验证码,判断跟用户输入的谷歌验证码是否一样
*

默认使用时间戳的形式进行校验,原理很简单。生成秘钥、绑定秘钥、根据秘钥和时间戳(有冗余误差延时)进行解密,解密的值与用户输入的一致即可。

这种基于约定的加解密,无需中心服务器,属于区块链的一个简单应用场景。

因为《谷歌身份验证器》客户端覆盖面广,所以没必要自己再做一个。

1、maven引入依赖

<!--google两步认证相关--><dependency><groupId>de.taimos</groupId><artifactId>totp</artifactId><version>1.0</version></dependency><dependency><groupId>commons-codec</groupId><artifactId>commons-codec</artifactId><version>1.10</version></dependency><dependency><groupId>com.google.zxing</groupId><artifactId>javase</artifactId><version>3.2.1</version></dependency>

2、简单的秘钥生成跟解密


import de.taimos.totp.TOTP;
import org.apache.commons.codec.binary.Base32;
import org.apache.commons.codec.binary.Hex;
import java.security.SecureRandom;/*** google 二次验证码实现逻辑** 1、平台端生成32位秘钥 ,然后将秘钥和用户账户对应关系存到自己的数据库** 2、用户端使用《谷歌身份验证器》添加账户并配置第一步给出的秘钥 (每个用户要有独立秘钥,不能重复)** 3、用户登录时候输入账户、密码、谷歌验证码 ;后台根据账户查询出秘钥,然后反解析得出当前动态验证码,判断跟用户输入的谷歌验证码是否一样**/
public class GoogleAuthenticationTool {// 生成32位秘钥public static String generateSecretKey() {SecureRandom random = new SecureRandom();byte[] bytes = new byte[20];random.nextBytes(bytes);Base32 base32 = new Base32();return base32.encodeToString(bytes);}/*** 根据32位随机码获得正确的6位数字* @param secretKey* @return*/public static String getTOTPCode(String secretKey) {Base32 base32 = new Base32();byte[] bytes = base32.decode(secretKey);String hexKey = Hex.encodeHexString(bytes);return TOTP.getOTP(hexKey);}static String key="UBKHKX2S34GIXGN6HF46C3D44YJF34Z3";public static void main(String[] args) {System.out.println(getTOTPCode(key));}}

谷歌动态验证码的简单使用相关推荐

  1. 谷歌动态验证码二次验证ssh

    显示页面 欢迎使用Markdown编辑器 新的改变 功能快捷键 合理的创建标题,有助于目录的生成 如何改变文本的样式 插入链接与图片 如何插入一段漂亮的代码片 生成一个适合你的列表 创建一个表格 设定 ...

  2. Linux下使用ssh动态验证码登陆机器

    ssh动态验证码登录机器 Google Authenticator是一个动态验证码程序,兼容各种智能手机平板设备,可以用来做各种帐号的二次验证,增加帐号的安全性.SSH是Linux系统的最重要防线之一 ...

  3. .NET中生成动态验证码

    NET中生成动态验证码 验证码是图片上写上几个字,然后对这几个字做特殊处理,如扭曲.旋转.修改文字位置,然后加入一些线条,或加入一些特殊效果,使这些在人类能正常识别的同时,机器却很难识别出来,以达到防 ...

  4. 实现动态验证码的思路

    示例 背景 验证码主要是防止机器暴力破解.之前的验证码都是以静态为主,现在一些产品开始使用动态方式,增加破解的难度.动态方式以 gif 最为简单可靠.gif 兼容性好,尺寸小.这里分享的就是一种:用 ...

  5. 登陆界面如何生成动态验证码

    在设计登录界面时验证码是必不可少,本实例将简单的生成动态验证码. 根据个人需求将生成验证码代码放到不同的的地方,可以放到前段控制器中通过请求方式生成验证码,也可已将代码放到一个JSP页面通过应用JSP ...

  6. android开发动态口令,谷歌动态口令最新版下载-谷歌动态口令验证器v5.00 安卓官方版 - 极光下载站...

    谷歌动态口令安卓版是全新推出的安全性极高的口令软件,有的用户反应自己的谷歌账号会有所不良好的反应,该工具就是为了全面解决这种恶意还打造的验证app,有需要的朋友们可以来试试,极光下载站提供谷歌动态口令 ...

  7. google动态口令 php,谷歌动态口令怎么用 谷歌动态口令使用教程

    1.百度下载"谷歌动态口令" 2.安装好之后,图标是这样的 3.去添加账号(就是给让你输入谷歌验证码的那个网站,在"身份验证器"里创建一个对应的账号,比如btc ...

  8. Linux下使用Google Authenticator配置SSH登录动态验证码

    说明: 1.一般ssh登录服务器,只需要输入账号和密码. 2.本教程的目的:在账号和密码之间再增加一个 验证码,只有输入正确的验证码之后,再输入 密码才能登录.这样就增强了ssh登录的安全性. 3.账 ...

  9. java校验码的设计_Java动态验证码单线设计的两种方法

    1.java的动态验证码我这里将介绍两种方法: 一:根据java本身提供的一种验证码的写法,这种呢只限于大家了解就可以了,因为java自带的模式编写的在实际开发中是没有意义的,所以只供学习一下就可以了 ...

  10. phpgif图片包_php生成动态验证码gif图片

    这是一个通过php生成的动态验证码图片的示例,重点是可以运行哦!下面先发下效果图: 下面是php生成动态验证码需要用到的相关类和函数. /** *ImageCode 生成包含验证码的GIF图片的函数 ...

最新文章

  1. 揭开Annotation的面纱
  2. Java面试笔试题大汇总三(最全+详细答案)
  3. Android 知识点梳理
  4. es根据磁盘使用情况来决定是否分配shard
  5. linux 安装反病毒软件
  6. extjs 文件加载、解析流程
  7. leetcode1466. 重新规划路线(dfs)
  8. 远程连接mysql数据库,1130问题
  9. vue.js的项目实战
  10. python实现8大排序算法
  11. (三)使用Keras构建移动风格迁移CycleGAN
  12. 接口测试---mock变量自定义变量的使用
  13. Windows操作系统下使用pip安装pygame
  14. WIN8 下IE突然无法打开(管理员权限可打开)
  15. sql server 运维时CPU,内存,操作系统等信息查询(用sql语句)
  16. 使用T4模板动态生成邮件内容并储存到任意位置
  17. 线上问题:大事务问题
  18. matlab,python 写kml文件(点,线,多边形)
  19. 烧写嵌入式linux,嵌入式linux系统烧写
  20. GJB438C-2021规范详解其一

热门文章

  1. cad细等线体不显示_cad字体cass cass如何修改字体
  2. Excel数据分析的代码(包括列表的操作)
  3. 【C语言】九九乘法口诀表
  4. 安装net framework3.5提示需要.net framework3.5,错误代码0x800f081f
  5. 2022上半年软件设计师历年真题
  6. R语言 打包流程-采坑无数终有果
  7. 就算不偷盗,也让你看看计算机里常用的有那些软件--常用软件序列号
  8. 路径太深 无法删除文件夹 之解决办法
  9. 文件源路径太长无法删除
  10. windows internals(深入解析windows操作系统)笔记