Web

Генератор случайных строк в PHP

Я пытаюсь создать рандомизированную строку в PHP и не получаю абсолютно никакого вывода с этим:

<?php

    function RandomString() {

        $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';

        $randstring = '';

        for ($i = 0; $i < 10; $i++) {

            $randstring = $characters[rand(0, strlen($characters))];

        }

        return $randstring;

    }

    RandomString();

    echo $randstring;

 

Что я делаю неправильно?

 

Ответ 1

Чтобы ответить на этот вопрос конкретно, необходимо решить две проблемы:

  1. $randstring не входит в область видимости, когда вы вызываете ее, используя echo.

  2. В цикле символы не объединяются.

 Вот фрагмент кода с исправлениями:

function generateRandomString($length = 10) {

    $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';

    $charactersLength = strlen($characters);

    $randomString = '';

    for ($i = 0; $i < $length; $i++) {

        $randomString .= $characters[rand(0, $charactersLength - 1)];

    }

    return $randomString;

}

Вывод случайной строки со следующим кодом:

// Echo случайной строки.

// По желанию вы можете задать необходимую длину строки.

echo generateRandomString();

 

Ответ 2

На этот вопрос есть много ответов, но ни один из них не использует криптографически безопасный генератор псевдослучайных чисел (CSPRNG).

Простой, безопасный и правильный ответ использовать RandomLib и не изобретать велосипед.

Для тех из вас, кто настаивает на изобретении собственного решения, для этой цели предусмотрена в PHP 7.0.0 функция random_int() ; если вы все еще используете PHP 5.x, мы написали полифилл PHP 5,random_int(), чтобы вы могли использовать новый API еще до обновления до PHP 7.

Безопасное создание случайных целых чисел в PHP  нетривиальная задача. Вы всегда должны проконсультироваться со своими постоянными специалистами по криптографии StackExchange, прежде чем развертывать собственный алгоритм в производстве.

При наличии безопасного генератора целых чисел генерация случайной строки с помощью CSPRNG это простое дело.

Создание безопасной случайной строки:

/**

 * Генерирует случайную строку, используя криптографически безопасный 

 * генератор псевдослучайных чисел (random_int)

 *

 * Эта функция сейчас использует подсказки типов (только для PHP 7+), но изначально она была написана для PHP 5.

 * 

 * Для PHP 7, random_int является функцией ядра PHP.

 * Для PHP 5.x, зависит от https://github.com/paragonie/random_compat

 * 

 * @param int $length      Сколько символов нам нужно?

 * @param string $keyspace Строка всех возможных символов.

* @return string

**/

function random_str(

    int $length = 64,

    string $keyspace = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'

): string {

    if ($length < 1) {

        throw new \RangeException("Длина должна быть больше 0!");

    }

    $pieces = [];

    $max    = mb_strlen($keyspace, '8bit') - 1;

    for ($i = 0; $i < $length; ++$i) {

        $pieces []= $keyspace[random_int(0, $max)];

    }

    return implode('', $pieces);

}

 Использование:

$a = random_str(32);

$b = random_str(8, 'abcdefghijklmnopqrstuvwxyz');

$c = random_str();

 

Ответ 3

Это создает шестнадцатеричную строку длиной 20 символов:

$string = bin2hex(openssl_random_pseudo_bytes(10)); // 20 символов

В PHP 7 (random_bytes()):

$string = base64_encode(random_bytes(10)); // ~14 characters, включая /=+

// или

$string = substr(str_replace(['+', '/', '='], '', base64_encode(random_bytes(32))), 0, 32); // 32 символа, без /=+

// или

$string = bin2hex(random_bytes(10)); // 20 символов, только 0-9a-f

 

Ответ 4

Лучший способ реализовать эту функцию:

function RandomString($length) {

    $keys = array_merge(range(0,9), range('a', 'z'));

    $key = "";

    for($i=0; $i < $length; $i++) {

        $key .= $keys[mt_rand(0, count($keys) - 1)];

    }

    return $key;

}

echo RandomString(20);



Схожие статьи

Web

Проверка равенства двух массивов в PHP

Лучший браузер для веб-разработчиков сайтов 2021
Web

Лучший браузер для веб-разработчиков сайтов 2021

Web

Почему $_FILES может быть пустым при загрузке файлов в PHP?

Web

Как зашифровать/расшифровать данные на php