java – 一次性密码安全风险

我们正在开发一个Web应用程序,用户必须输入一次性密码(我们通过电子邮件发送给用户)才能完成操作.但是,如果恶意用户开发机器人并猜测我们生成一次性密码的模式,他可以输入一些随机电子邮件ID,甚至不查看他可以确认交易的电子邮件.这样他就可以用错误的确认来攻击系统.有人可以告诉我们人们如何处理这个问题?

谢谢

如果您的随机一次性密码与常规密码具有相同的熵,则这应该与任何其他密码解决方案一样好.

这是一个示例密码生成代码段,应该是相当不可预测的:

import java.security.SecureRandom;
import java.util.Random;

class Test {

    public static String generatePassword() {
        String chars = "abcdefghijklmnopqrstuvwxyz"
                     + "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
                     + "0123456789!@%$%&^?|~'\"#+="
                     + "\\*/.,:;[]()-_<>";

        final int PW_LENGTH = 20;
        Random rnd = new SecureRandom();
        StringBuilder pass = new StringBuilder();
        for (int i = 0; i < PW_LENGTH; i++)
            pass.append(chars.charAt(rnd.nextInt(chars.length())));
        return pass.toString();
    }

    public static void main(String[] args) {
        System.out.println(generatePassword());
        System.out.println(generatePassword());
        System.out.println(generatePassword());
    }
}

输出:

Qp';Md#93Dxh\0|%%Ny7
oqvntn2).~W@%P'EM*AS
WEo2sz2Sm~a'm=Ss&Lu[

相关文章
相关标签/搜索