gpt4 book ai didi

java - 安全号码生成器验证身份验证

转载 作者:行者123 更新时间:2023-12-02 10:23:56 25 4
gpt4 key购买 nike

我的代码使用安全随机数生成器生成字母/数字的随机序列,但是当要在控制台中验证代码时,验证失败。另外,有没有办法保存一段时间内生成的单曲。

import java.security.SecureRandom;
import java.util.Base64;
import java.util.Base64.Encoder;
import java.util.Scanner;

public class PasswordGenerator {


public void generatePassword() {
System.out.println(generateSafeToken());
}

private String generateSafeToken() {
SecureRandom random = new SecureRandom();
byte bytes[] = new byte[20];
random.nextBytes(bytes);
Encoder encoder = Base64.getUrlEncoder().withoutPadding();
String token = encoder.encodeToString(bytes);
return token;
}

public void verify() {
Scanner sc = new Scanner(System.in);
System.out.println("Enter code: ");
String myToken = sc.next();
if (generateSafeToken().equals(myToken)) {
System.out.println("Code Verified");
}
System.out.println("Not Verified");
sc.close();
}

}

最佳答案

您正在生成一个新 token 并尝试验证该 token :

if (generateSafeToken().equals(myToken))

两个随机生成的 token 不太可能相同。相反,存储第一个值并与存储的值进行比较。可能很简单:

private string randomToken;

public void generatePassword() {
this.randomToken= generateSafeToken();
System.out.println(this.randomToken);
}

然后再与它进行比较:

String myToken = sc.next();
if (this.randomToken.equals(myToken)) {
System.out.println("Code Verified");
} else {
System.out.println("Not Verified");
}

当您扩展逻辑时,您可以对空值进行一些错误检查,确保按预期顺序调用您的方法,也许将 token 存储在类之外的其他位置等。(例如,在最后一个中,一个注册系统,其中 token 通过电子邮件发送给用户,稍后验证您需要将其保存在某个地方,例如数据库中。)

关于java - 安全号码生成器验证身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54119929/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com