java动态口令登录实现过程详解

Java动态口令登录实现过程详解

什么是动态口令

  • 动态口令是指使用时间限制的口令。
  • 不同于常规的静态口令,动态口令需要设备生成一次性密码,具有更高的安全性。

动态口令登录的实现过程

  1. 用户在登录页面输入用户名和密码,提交表单给后端服务器。
  2. 后端服务器接收到表单后,根据用户名查询数据库中存储的该用户的密钥。
  3. 后端服务器随机生成一个6位数的随机数,并使用密钥生成一个一次性密码。
  4. 后端服务器将生成的一次性密码和随机数存储到数据库中,并将随机数返回给前端页面。
  5. 前端页面通过JS将用户输入的密码和后端返回的随机数作为参数,对密码进行加密处理。
  6. 加密后的密码和用户名一起提交表单至后端服务器。
  7. 后端服务器接收到表单后,重新生成一次性密码,并使用相同的算法判断加密后的密码是否正确。
  8. 如果密码正确,则将登录成功的信息存储到session中,并跳转至用户主页面。
  9. 如果密码错误,则返回登录错误的信息。

代码实现

后端实现代码

//查询该用户的密钥
String secretKey = userService.getUserSecretKey(username);

//生成6位数随机数
String randomNum = RandomUtil.getRandomNumber(6);

//使用密钥生成一次性密码
String otp = OtpUtil.generateOtp(secretKey, randomNum);

//将一次性密码和随机数存储到数据库
userService.saveOtp(username, otp, randomNum);

前端实现代码

//使用jsotp库生成动态口令
var totp = jsotp.TOTP("<?php echo $otp ?>");
var pin = totp.now();

//将生成的动态口令和随机数加密后提交表单
var ciphertext = CryptoJS.SHA256(pin + randomNum + password + username).toString();

示例说明

示例1:用户使用手机号和密码登录

  1. 用户在登录页面输入手机号和密码并提交表单。
  2. 后端服务器查询数据库中该用户的密钥,并生成一次性密码和随机数存储到数据库。
  3. 后端服务器将随机数返回给前端页面。
  4. 前端使用随机数和密码生成加密后的密码,和手机号一起提交表单至后端。
  5. 后端验证密码是否正确,如果正确则将登录成功的信息存储到session中。

示例2:用户使用谷歌验证码和密码登录

  1. 用户打开谷歌验证码APP,获取当前动态口令。
  2. 用户在登录页面输入用户名、密码和当前动态口令并提交表单。
  3. 后端服务器查询数据库中该用户的密钥,并生成一次性密码和随机数存储到数据库。
  4. 后端服务器将随机数返回给前端页面。
  5. 前端使用随机数和密码生成加密后的密码,和用户名一起提交表单至后端。
  6. 后端验证密码是否正确,如果正确则将登录成功的信息存储到session中。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java动态口令登录实现过程详解 - Python技术站

(0)
上一篇 2023年5月26日
下一篇 2023年5月26日

相关文章

  • java读取配置文件(properties)的时候,unicode码转utf-8方式

    Java读取配置文件(properties)时,如果文件中含有中文或其他非英文字符,需要进行字符编码转换,否则会出现乱码现象。此时可以采用unicode到UTF-8的编码方式。 以下是Java读取配置文件(properties)时unicode码转UTF-8的完整攻略: 1. 首先在properties文件中保存中文字符 在编辑properties文件时,需…

    Java 2023年5月20日
    00
  • 利用json2POJO with Lombok 插件自动生成java类的操作

    利用json2POJO with Lombok插件自动生成Java类是一个方便快捷的方式,特别是在进行大量API接口开发的时候。下面是使用该插件的完整攻略。 1. 下载插件 首先,需要在Intellij IDEA中安装json2POJO with Lombok插件。可以通过Intellij IDEA的插件市场来搜索和安装该插件。 2. 生成Java类 在In…

    Java 2023年5月26日
    00
  • java.net.ConnectException: Connection refused问题解决办法

    当Java应用程序尝试连接到另一个应用程序或服务器但无法建立连接时,你可能会遇到 java.net.ConnectException: Connection refused 异常。这种情况通常表示目标主机拒绝连接或者连接超时。下面是解决此问题的完整攻略: 1. 检查目标服务器/应用程序是否正在运行 首先,你需要确保你所连接的应用程序或服务器正在运行。 如果目…

    Java 2023年5月27日
    00
  • 常见的Java并发编程工具有哪些?

    常见的Java并发编程工具有如下几种: Lock类 Atomic类 ConcurrentHashMap类 Semaphore类 CyclicBarrier类 CountDownLatch类 Executors类 下面将针对每种工具进行详细说明,并提供使用示例。 1. Lock类 Lock类是Java中替代synchronized关键字的重要工具之一。它提供了…

    Java 2023年5月11日
    00
  • IntelliJ IDEA中配置Tomcat超详细教程

    下面就介绍一下在 IntelliJ IDEA 中配置 Tomcat 并部署 Web 应用的详细步骤: 1. 下载并安装 Tomcat 首先,我们需要从 Apache Tomcat 的官网(https://tomcat.apache.org/)下载 Tomcat,下载完后按照说明安装即可。 2. 创建 Web 项目 在 IntelliJ IDEA 中创建一个新…

    Java 2023年6月3日
    00
  • Java Timer使用讲解

    Java Timer使用讲解 Java Timer 是 Java SE 提供的一个定时器工具,可以用于定时运行任务、周期性地运行任务等。本文将详细介绍 Timer 的使用方法和注意事项。 Timer 的基本使用方法 Timer 类提供了三个构造方法,分别为: Timer() Timer(boolean isDaemon) Timer(String name)…

    Java 2023年5月20日
    00
  • 深入浅出讲解Spring框架中AOP及动态代理的应用

    深入浅出讲解Spring框架中AOP及动态代理的应用 什么是AOP AOP(Aspect Oriented Programming),即面向切面编程,是一种编程范式。这种编程范式可以帮助我们更好地解耦,关注点分离,使得代码更加清晰明了。在Spring框架中,AOP是实现Aspect Oriented Programming的一种方式。 AOP的核心概念 Jo…

    Java 2023年5月19日
    00
  • Spring MVC 4.1.3 + MyBatis零基础搭建Web开发框架(注解模式)

    下面是Spring MVC 4.1.3 + MyBatis零基础搭建Web开发框架(注解模式)的完整攻略。 1. 环境搭建 JDK安装及环境变量配置 Maven安装及配置 Eclipse/IDEA集成Maven插件及配置 2. 项目建立 利用Maven建立项目:新建Maven项目,设置GroupId、ArtifactId、Version等基本信息。 导入相关…

    Java 2023年5月31日
    00
合作推广
合作推广
分享本页
返回顶部