通过JAVA实现OTP验证-下

前言

在上一篇文章中我们讲了动态令牌背后的OTP技术,这篇文章我们可以尝试自己用JAVA实现OTP验证。

参考文章通过JAVA实现OTP验证-上

准备工具

IntelliJ IDEA
源码 - 提取码:Huah
commons-codec-1.9.jar - 提取码:Huah
二维码生成网站

一、导入项目

  1. 点击IDEA选项栏中的文件,在点击打开
    在这里插入图片描述
  2. 找到自己存放源码文件的路径,再选择源码,点击下面的打开
  3. 这里我们看到这里报错

那是因为我们没有导入org.apache.commons.codec.binary的jar包在这里插入图片描述在这里插入图片描述

  1. 导入jar包

这里是引用

  1. 首先点击文件中项目结构这块
    在这里插入图片描述
  2. 再选择模块-依赖这里,再点击左上角有个+号,再选择第一个
    在这里插入图片描述
  3. 找到自己放jar包的路径,选择jar包,最后再点击确定就好了
    在这里插入图片描述
  4. 再点击这里的确定就成功将jar包导入
    在这里插入图片描述

二、运行源码

  1. 运行OTPAuthUtilTester类
  1. 选择OTPAuthUtilTester类

在这里插入图片描述
2. 运行
在这里插入图片描述

3.控制台打印了如下信息,但是我们看到动态口令是否正确打印的是false
那是因为我们没有将正确的动态口令存到code变量中
在这里插入图片描述

三、验证令牌

  1. 打开免费的二维码生成网站

otpauth://totp/Huahua?secret=WJ5E332WQQQ6HHUPM2JELL2ZCFNK56MQLIYD7RY4K5NNTHO6TURA

将上述链接粘贴到文本框中,我们再用微信小程序——二次验证码扫描旁边的二维码
在这里插入图片描述

  1. 二次验证码扫码

在这里插入图片描述
在这里插入图片描述
这里我们看到动态令牌已经生成了,并且旁边有时间限制,表示这个动态令牌近战当前时间内有效

  1. 将动态令牌存储到code变量中

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这里我们看到此时动态令牌是否正确打印了true

总结

通过JAVA,自己动手去尝试实现动态令牌验证的过程是否对于你来说有趣呢?其实这里我们只是简单的实现了,感兴趣的同学可以继续深入的去研究,相信会学到更多有用的知识!

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
### 回答1: 首先,实现OTP算法的Java代码可以按照以下步骤进行:1. 使用SecureRandom生成OTP的秘钥;2. 使用HMAC-SHA-1把OTP秘钥和时间戳进行哈希运算;3. 将哈希值进行分割,并转换为十六进制字符串;4. 将十六进制字符串映射为十位数字;5. 返回OTP结果。 ### 回答2: OTP(一次性密码)算法是一种基于哈希函数和对称密码算法的密码技术,它通过生成一次性的密码来实现安全通信。下面是使用Java代码实现OTP算法的步骤: 步骤1:导入相关的库 ```java import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.Random; ``` 步骤2:生成随机的密钥 ```java public static String generateKey(int length) { String characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; Random random = new Random(); StringBuilder key = new StringBuilder(length); for (int i = 0; i < length; i++) { key.append(characters.charAt(random.nextInt(characters.length()))); } return key.toString(); } ``` 步骤3:生成一次性密码 ```java public static String generateOTP(String key, String message) throws NoSuchAlgorithmException { MessageDigest md = MessageDigest.getInstance("SHA-256"); md.update((key + message).getBytes()); byte[] digest = md.digest(); StringBuilder otp = new StringBuilder(); for (byte b : digest) { otp.append(String.format("%02x", b)); } return otp.toString(); } ``` 步骤4:使用示例 ```java public static void main(String[] args) throws NoSuchAlgorithmException { String key = generateKey(10); String message = "Hello, World!"; String otp = generateOTP(key, message); System.out.println("One-Time Password: " + otp); } ``` 以上代码通过使用SHA-256算法生成一次性密码,其中`generateKey`函数用于生成长度为`length`的随机密钥,`generateOTP`函数将密钥和消息结合起来,并使用SHA-256算法进行哈希计算。最后,使用`main`函数演示了如何生成一次性密码。 请注意,实际应用中,还需要考虑如何传递密钥和一次性密码以及如何验证接收到的一次性密码的有效性等问题。以上代码只是对OTP算法的简单实现,实际应用中还需要进行更多的安全性验证和处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@花花.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值