Почему я не могу использовать функцию, чтобы упростить мой цикл for - PullRequest
0 голосов
/ 29 апреля 2020

Я создаю веб-страницу, чтобы взломать простой MD5 га sh из четырех булавок git для развлечения. Метод, который я использовал, был в основном пробовать все комбинации и проверять по значению MD5, введенному пользователем. Ниже приведен код PHP, который я создал для достижения цели sh.

Вывод отладки:

<?php
$answer = "PIN not found";
if (isset($_GET['md5'])) {
  $txt = 'abcdefjhig';
  $time_pre = microtime(TRUE);
  $value = $_GET['md5'];
  $show = 15;

  for ($i = 0; $i <= 9; $i++) {
    $first = $i;
    for ($j = 0; $j <= 9; $j++) {
      $second = $j;
      for ($k = 0; $k <= 9; $k++) {
        $third = $k;
        for ($x = 0; $x <= 9; $x++) {
          $fourth = $x;
          $whole = $first . $second . $third . $fourth;
          $check = hash('md5', $whole);
          if ($check == $value) {
            $answer = $whole;
            echo "The pin is $answer";
          }
          if ($show > 0) {
            print"$check $whole \n";
            $show = $show - 1;
          }
        }
      }
    }
  }
  echo "\n";
  $time_post = microtime(TRUE);
  print "Elapsed time:";
  print $time_post - $time_pre;
}
?>

Обратите внимание, что в середине есть четыре очень похожих цикла, я попробовал чтобы упростить это с помощью функций, но он просто возвращает одно четыре числа di git, что составляет 9999 вместо всех них. Ниже приведена функция, которую я создал:

function construct($input){
  for($i=0; $i<=9, $i++){
    $input=$i;
  } 
  return $input
}

Затем я попытался вызвать эту функцию четыре раза, чтобы сформировать все четыре числа di git, но это просто дает мне 9999. Кто-нибудь может помочь? Большое спасибо.

Ответы [ 2 ]

0 голосов
/ 29 апреля 2020

Попробуйте это:

for ($i=0; $i<=9999 ; $i++) { 
   $whole = sprintf('%04d', $i);
    $check=hash('md5', $whole);
    if($check==$value){
        $answer=$whole;
        echo "The pin is $answer";
        break; //remove this if you do not want to break the loop here
    }
    if ($show>0) {
        print"$check $whole \n";
        $show=$show-1;          
    }   
}
0 голосов
/ 29 апреля 2020

Вы используете числа от 0 до 9999, так почему просто l oop через эти числа? Вы можете добавить нули, используя str_pad(), например, так:

for ($i = 0; $i <= 9999; $i++) {
    $whole = str_pad($i, 4, '0', STR_PAD_LEFT);
}

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...