0

我有一个系统设置来生成随机代码。它创造了成千上万的人:

function createRandomPassword() {
    $chars = "abcdefghijklmnopqrstuvwxyz0123456789";

    srand((double)microtime()*1000000);
    $i = 0;
    $pass = '' ;
    while ($i <= 7) {
        $num = rand() % 33;
        $tmp = substr($chars, $num, 1);
        $pass = $pass . $tmp;
        $i++;
    }
    return $pass;
}

基本上这个函数用于循环并给我我想要的结果数量。但是,非常重要的是,没有人可以获取少量这些代码并想办法从给定的公式或其他东西中预测更多的代码。我目前的系统可以做到这一点吗?或者有没有办法让我当前的系统更安全,以防止人们预测更多的代码?

谢谢

4

1 回答 1

0

我怀疑人们可以轻松预测生成更多这些代码的方法,除非他们当然有您的 php 代码。

您可以将有效代码存储在数据库中,并通过检查它是否存在于“valid_codes”表中来检查输入的代码是否是您生成的代码。

或者....

我可能会尝试在 $pass 代码中添加一个验证字符串,以便您可以在用户输入密码后检查该代码是否确实是有效代码(由您生成)。

例如,这将在 $pass 的末尾添加一个 6 字符的验证字符串:

function createRandomPassword() {
    $chars = "abcdefghijklmnopqrstuvwxyz0123456789";

    srand((double)microtime()*1000000);
    $i = 0;
    $pass = '' ;
    while ($i <= 7) {
        $num = rand() % 33;
        $tmp = substr($chars, $num, 1);
        $pass = $pass . $tmp;
        $i++;
    }

    // NEW STUFF HERE
    $salt = 'my_secret_salt';
    // generate an md5 of $pass + our salt
    $verification_md5 = md5($pass . $salt);
    // $verification_code = the first 6 characters of that md5
    $verification_code = substr($verification_md5, 0, 6);

    $pass = $pass . $verification_code;

    return $pass;
}

然后,当有人输入您的代码时,您可以通过检查 md5() 的前 6 个字符 + 他们输入的代码的盐(当然减去最后 6 个字符)来检查这是否是“有效”代码。

于 2012-04-25T14:17:22.520 回答