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日

相关文章

  • Spring整合Mybatis思路梳理总结

    Spring整合Mybatis思路梳理总结 1. 引入相关依赖 首先,在Maven或Gradle中引入Spring和Mybatis相关的依赖: <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</arti…

    Java 2023年5月19日
    00
  • SpringMVC 传日期参数到后台的实例讲解

    在 Spring MVC 中,我们可以使用多种方式来传递日期参数到后台,包括使用 @DateTimeFormat 注解、使用 Converter 接口、使用 Formatter 接口等。本文将详细讲解 Spring MVC 如何传递日期参数到后台,包括如何使用 @DateTimeFormat 注解、使用 Converter 接口、使用 Formatter 接…

    Java 2023年5月18日
    00
  • perl的格式化(Format)报表输出实现代码

    要在Perl中实现格式化报表输出,我们可以使用Perl的格式化(Format)功能。通过定义格式模板,我们可以指定报表的多种输出形式,例如表格、列宽对齐等。下面是实现格式化报表输出的完整攻略: 步骤1:定义格式模板 我们可以使用Perl中的format指令定义格式模板,格式模板包含多个格式控制符来指定报表的布局、对齐、填充等属性。下面是一个示例格式模板: f…

    Java 2023年6月15日
    00
  • Spring-Bean创建对象的步骤方式详解

    下面是详细的“Spring-Bean创建对象的步骤方式详解”的攻略。 1. Spring-Bean创建对象的步骤方式 在Spring中有两种方式可以创建Bean对象,分别是: 使用构造方法 使用工厂方法 1.1 使用构造方法 1.1.1 构造方法注入 在使用构造方法创建Bean对象的时候,可以使用构造方法注入来为对象进行属性赋值。具体步骤如下: 在配置文件中…

    Java 2023年5月26日
    00
  • 使用java实现猜拳小游戏

    使用Java实现猜拳小游戏 概述 在本篇攻略中,我们将使用Java编写一个猜拳小游戏,让玩家与计算机进行猜拳对抗。猜拳规则如下: 剪刀(scissors)败给石头(rock),胜过布(paper) 石头(rock)胜过剪刀(scissors),败给布(paper) 布(paper)胜过石头(rock),败给剪刀(scissors) 游戏结束后,将统计双方获胜…

    Java 2023年5月19日
    00
  • 在.jsp中非表单请求action的几种方式总结

    关于“在.jsp中非表单请求action的几种方式总结”的攻略,我将按照以下步骤进行讲解: 1. 此类请求的定义 在jsp中,我们通常通过表单来提交数据进行后台处理。但是,有时候我们也需要通过非表单请求来实现一些操作,比如: 通过超链接跳转页面 在jsp中使用ajax进行异步请求 在jsp中使用iframe嵌入其他页面 点击页面上的按钮或链接,触发相应的操作…

    Java 2023年6月15日
    00
  • 利用Kotlin + Spring Boot实现后端开发

    接下来我将详细讲解如何使用Kotlin和Spring Boot实现后端开发的完整攻略。 前置条件 了解Kotlin和Spring Boot的基础知识 安装好Kotlin和Java开发环境 开始实现 步骤一:创建Spring Boot项目 首先我们需要创建一个Spring Boot项目,可以使用你喜欢的IDE或命令行工具来完成。为了使用Kotlin,我们需要在…

    Java 2023年5月19日
    00
  • Android 服务端将位置信息发送给客户端的实现

    实现Android服务端将位置信息发送给客户端的过程,可以分为以下几个步骤: 步骤一:创建Android客户端并获取用户位置信息 为了从服务端获取位置信息,我们需要在Android客户端中获取用户位置。这可以通过Android系统中的LocationManager和LocationListener类实现。下面是一个简单的实现示例: LocationManag…

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