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

yizhihongxing

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日

相关文章

  • Go Java算法之简化路径实例详解

    Go Java算法之简化路径实例详解 本篇文章将详细讲解如何使用Go和Java算法来简化路径。首先,我们需要了解路径简化的定义和目的。 什么是路径简化? 路径简化是将路径中冗余的部分删除,使其变得更短、更干净、更易读。例如,路径”/a/b/c/../d”可以简化为”/a/b/d”。这不仅可以节省存储空间,还可以提高代码的效率。 路径简化的目的 路径简化有多种…

    Java 2023年5月19日
    00
  • 浅谈java面向对象(类,封装,this,构造方法)

    浅谈Java面向对象 类 在Java中,类可看做是一个数据类型,它包含了数据和方法。数据称为类的属性,而方法则是类的行为。 在代码实现中,通过使用关键字“class”来定义一个类,类的命名应遵循驼峰命名法。下面是一个简单的类的定义示例: public class Person { private String name; private int age; p…

    Java 2023年5月26日
    00
  • 使用JAVA通过ARP欺骗类似P2P终结者实现数据封包监听

    首先需要明确的是,ARP欺骗是指通过伪造ARP响应的方式,诱导受害者将数据包发送至攻击者的电脑,从而实现数据封包监听、拦截等攻击行为。下面给出使用Java实现ARP欺骗的攻略过程。 1. 获取受害者电脑的MAC地址 要实现ARP欺骗的攻击,首先需要获取受害者电脑的MAC地址。可以通过以下代码实现: InetAddress address = InetAddr…

    Java 2023年6月15日
    00
  • springboot-2.3.x最新版源码阅读环境搭建(基于gradle构建)

    下面我将介绍如何搭建springboot-2.3.x最新版源码阅读环境(基于gradle构建)。 1. 准备工作 首先需要安装以下工具: JDK8+ Git Gradle IntelliJ IDEA 2. 下载源码 在Github上下载最新版的springboot源码。 $ git clone https://github.com/spring-projec…

    Java 2023年5月19日
    00
  • java实现文件打包压缩输出到浏览器下载

    下面是Java实现文件打包压缩输出到浏览器下载的详细攻略。 一、引入相关依赖 我们需要使用Java自带的ZipOutputStream类和ServletOutputStream类来实现文件压缩和下载功能。 import java.io.BufferedInputStream; import java.io.BufferedOutputStream; impo…

    Java 2023年5月26日
    00
  • Java实战之吃货联盟订餐系统

    Java实战之吃货联盟订餐系统攻略 系统需求 用户可以查看菜单列表信息 用户可以注册账号 用户可以登录进入系统 用户可以选择菜品下单 用户可以查看订单列表 用户可以修改个人信息和密码 技术选型 使用Spring Boot进行快速开发 使用MyBatis进行数据库操作 使用Thymeleaf进行前端页面渲染 使用Spring Security进行权限管理 使用…

    Java 2023年5月24日
    00
  • 从最基本的Java工程搭建SpringMVC+SpringDataJPA+Hibernate

    下面我将详细讲解“从最基本的Java工程搭建SpringMVC+SpringDataJPA+Hibernate”的完整攻略。 前置要求 在正式进行搭建之前,需要确保你已经安装配置好以下软件: JDK Maven Tomcat IDE(推荐使用IntelliJ IDEA) 步骤一:创建Maven项目 首先,我们需要创建一个Maven项目。在IDE中,找到创建M…

    Java 2023年5月20日
    00
  • Java方法的返回值及注意事项小结

    当我们在编写Java程序时,有时需要从方法中获取数据。在许多情况下,我们希望方法能够返回一个值,这就是Java方法的返回值。在本文中,将介绍Java方法的返回值以及注意事项。 什么是Java方法的返回值? Java方法的返回值是指当方法被调用时,此方法所返回的数据。方法的返回值用于与另一个方法或代码交互。一般情况下,Java方法返回值可以是任何基本数据类型(…

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