PHP скрипт для MD5 хэша каждой строки отдельно - PullRequest
0 голосов
/ 29 июня 2019

Я пытаюсь создать скрипт, который может MD5 быстро хэшировать много строк (более 50 000). У меня есть сценарий, который я пытался заставить работать, но иногда он дает разные результаты, и я не могу понять, почему. Есть идеи?

  <?php  
     if(isset($_POST['btn'])){
            $value=$_POST['text'];
            $ids = explode(PHP_EOL, $value);
            $content = '';
            for ($i=0;$i<count($ids);$i++){
                $content .= md5($ids[$i]).'<br>';
            }

            echo nl2br($content);
     }
     ?>

Когда я пытаюсь хэшировать:

apples  
bananas  
oranges  
pineapples

В результате:

265f78fc274d8428fd63dabc24400cb4  
63a63ddf49984e0f1cef336aeb6ca39c  
229b1cc78a248c6cea47fa95565dc9ca  
019b111ec0c13ed923922715bfb1670a  

Но я должен получить:

daeccf0ad3c1fc8c8015205c332f5b42  
ec121ff80513ae58ed478d5c5787075b  
91b07b3169d8a7cb6de940142187c8df  
019b111ec0c13ed923922715bfb1670a  

Ответы [ 2 ]

2 голосов
/ 29 июня 2019

Строки во входной строке разделены \r\n, но на вашем сервере PHP_EOL имеет значение \n. Поэтому, когда вы разбиваете входные данные на строки, в конце каждой строки, кроме последней, стоит \r. echo md5("apples\r"); производит 265f78fc274d8428fd63dabc24400cb4.

Используйте trim() для удаления лишних пробелов.

$content .= md5(trim($ids[$i])).'<br>';
0 голосов
/ 29 июня 2019

В ваших входных данных есть пробелы. И не собирайте все 50k + хешей в памяти.
Попробуйте это

<?php  
if(isset($_POST['btn'])){
    $value=$_POST['text'];
    $ids = explode(PHP_EOL, $value);
    for ($i=0;$i<count($ids);$i++){
        echo nl2br(md5(trim($ids[$i])));
    }
}
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...