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 に答える