首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过Java生成动态口令

通过Java生成动态口令
EN

Stack Overflow用户
提问于 2018-03-24 11:36:52
回答 3查看 2.2K关注 0票数 2

我已经开发了下面的程序来生成OTP (一次性密码),现在请告知没有其他更好的和安全的方法,我可以在上下文中使用OTP

代码语言:javascript
复制
// Java code to explain how to generate OTP

// Here we are using random() method of util
// class in Java
import java.util.*;

public class NewClass
{
    static char[] OTP(int len)
    {
        System.out.println("Generating OTP using random() : ");
        System.out.print("You OTP is : ");

        // Using numeric values
        String numbers = "0123456789";

        // Using random method
        Random rndm_method = new Random();

        char[] otp = new char[len];

        for (int i = 0; i < len; i++)
        {
            // Use of charAt() method : to get character value
            // Use of nextInt() as it is scanning the value as int
            otp[i] =
             numbers.charAt(rndm_method.nextInt(numbers.length()));
        }
        return otp;
    }
    public static void main(String[] args)
    {
        int length = 4;
        System.out.println(OTP(length));
    }
}
EN

回答 3

Stack Overflow用户

发布于 2018-03-24 11:55:00

正如一条评论指出的那样,一次性密码只是一个随机数字或字符串。

查看您的代码,您使用的是Random类。这对于随机序列的质量在很大程度上无关紧要的应用是很好的。但是,Random的标准实现会产生高度可预测(自相关)的数字序列;请参阅https://stackoverflow.com/a/38345694/139985。您应该改用SecureRandom

我怀疑你使用nextInt(numbers.length())会放大自相关...因此,如果您继续使用Random,Samwell的建议将有所帮助。

票数 1
EN

Stack Overflow用户

发布于 2021-04-09 02:51:45

使用Java,以下代码将生成一个4位数的8+。只需在random.ints(...)中替换4即可方法使用您的OTP中所需的位数。

编辑:我读到SecureRandom是另一个生成随机数的类(它提供了额外的安全性)。如果您愿意,可以根据自己的需要使用它,而不是很好的老Random类。

代码语言:javascript
复制
...    
import java.util.Random;
//Or
//import java.security.SecureRandom;
...

Random random = new Random();
//Or
//SecureRandom random = new SecureRandom();

random.ints(4, 0, 10).mapToObj(Integer::toString).reduce((a, b) -> a + b)
    .ifPresent(System.out::println);

如果您想将值转换为字符串,而不只是打印它,那么:

代码语言:javascript
复制
String otp = random.ints(4, 0, 10).mapToObj(Integer::toString)
    .reduce((a, b) -> a + b).get(); 
票数 0
EN

Stack Overflow用户

发布于 2019-04-16 14:44:05

OTP只是一个固定长度的随机文本。只需一行代码即可实现(使用UUID)。参见下面的示例,该示例生成4个字符的动态口令。

代码语言:javascript
复制
UUID.randomUUID().toString().substring(0, 4)
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49460963

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档