Можно создать 2 последовательностей равны md5 случае, если использовать одну и ту же базу?


создавал проект с несколькими загружать изображения, и хотел, чтобы все оставались вместе, только разделенные ",", например: рисунок.jpg,imagem2.jpg...

$imagens_name = "";
processo de renomear.. Ele gerava um novo nome com md5 date()

тем не менее, иногда работает, отправляет 2 изображений, разделенных , с другим именем, но иногда отправлял и то же изображение с тем же именем, и когда вставлены более 2 изображений, он создавал первые две равные и 3 другой. Поэтому я заменил md5 date "system('date +%s%N');", и теперь этот работает нормально.

Мой вопрос, является ли сценарий, только в результате той же последовательности, в 2 изображений, так как дата была одинаковой (так что, когда я изменил, чтобы microtime он работал), или, если это невозможно создать две последовательности одинаковы md5 же, что база (date) будет тем же ?

 1
Author: Rafael, 2017-05-17

1 answers

String MD5 всегда будет одинаковым для одной и той же строки базы.

Например:
1 -> c4ca4238a0b923820dcc509a6f75849b
abc -> 900150983cd24fb0d6963f7d28e17f72

Как описали в вопросе, логика была согласована, как использовать текущую дату может повлечь конфликт одинаковые имена, так как цикл повторить, как правило, запускает процессы в миллисекундах.

Функция microtime() также может возвращать то же значение внутри этого контекста, поскольку, если итерация будет очень быстро, вы можете вернуть значение предыдущее значение.

Является более последовательным обеспечения уникальных значений, объединяя что-то более безопасное.

for($n = 1; $n < 10; $n++) {
    echo date('YmdHis').PHP_EOL;
}

//resultado:
20170518061514
20170518061514
20170518061514
20170518061514
20170518061514
20170518061514
20170518061514
20170518061514
20170518061514

Это, как вы пытались сделать. Обратите внимание, что 10 итераций были выполнены менее чем за 1 секунду, так что значения повторяются.

Идеи, чтобы сделать каждое уникальное значение, это добавить какой-то уникальный идентификатор.

/*
Nesse exemplo é concatenado o número da iteração corrente.
*/
for($n = 1; $n < 10; $n++) {
    echo date('YmdHis').':'.$n.PHP_EOL;
}

/*
Resultado
*/

20170518061756:1
20170518061756:2
20170518061756:3
20170518061756:4
20170518061756:5
20170518061756:6
20170518061756:7
20170518061756:8
20170518061756:9

Посмотрите, как расположен реализация MD5:

for($n = 1; $n < 10; $n++) {
    echo md5(date('YmdHis').':'.$n).PHP_EOL;
}

475531f945b1fe26a4849ab4f5474fd7
4e0fc04b52d05a86688892dd0ad92552
a58d7865693971aec8f6867de725dc0a
7f9d7c97091b11024295eed5641c99de
2e826491e8b9da0a005777f78ba9550b
ff8ab9eb829a36de0410bb9773a6315e
52e0220c76d2a18a210bfadb29158c39
659ec7a31ae61abd7022b6e21fb008e2
88da547523beb6d5f4f7c2a6aaa79037

Конечно, следует иметь в виду, что MD5 может производить столкновения даже с строки разные. Но это то, что едва ли или почти невозможно для цели контексте вопроса.

, Чтобы гарантировать, высокая работоспособность, запишите данные без шифрования. Он займет меньше места и становится свободной от столкновений даже на редких для этого случая.

Случае важно не записать числовой формат даты, маска с "short-id". Они IDs короткие тип в Youtube или услуг сокращения URL-адресов. Но это находится за пределами внимания вопрос.

 1
Author: Daniel Omine, 2017-05-17 21:28:55