@kalsc12345
Думаю как изучить ЯП

Подбор пароль к хэшу?

Суть такова Я не могу додуматься как сделать расшифровщик хэшей, на некоторых сайтах есть.
Ну попробовал сделать но в итоге не знаю как

<?php
$handle = "./test.txt", "r";
$saveFile = "./test_save.txt", "w";
if ($handle && $saveFile) {
while (($buffer = fgets($handle, 4096)) !== false) {
fwrite($saveFile, md5($buffer) . "\n");
}
fclose($handle);
fclose($saveFile);
echo "DONE!";
{

Я сделал на подобие загрузки в файл но как сделать чтобы человек отправляет POST и его принял скрипт и в файле словаря все в хэш превращал и сверял если был ответ он писал что хэш найдет и сам из словаря текст брал
Например: какой то хэщ: mD5 , Скрипт берет их файла 1.txt слова и превращает их MD5 и далее сверяет с хэшом MD5 если такое имеется то он писал слово которое нашел.

Прошу пожалуйста, хотябы подсказку.

Начинающий кодер.
  • Вопрос задан
  • 109 просмотров
Решения вопроса 1
delphinpro
@delphinpro
frontend developer
Для начала не файл, а база.

Делаете таблицу 'rainbow_table'

CREATE TABLE `rainbow_table` (
  `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
  `pass` VARCHAR(255) NOT NULL COLLATE 'utf8mb4_unicode_ci',
  `hash` CHAR(32) NOT NULL COLLATE 'utf8mb4_unicode_ci',
  PRIMARY KEY (`id`) USING BTREE,
  INDEX `hash_index` (`hash`) USING BTREE
)
COLLATE='utf8mb4_unicode_ci'
ENGINE=InnoDB;


Заполняете ее готовыми паролями и их хешами. На столбик hash повесьте индекс.

И потом вам останется только сделать выборку из базы

$config = [
  'db_name' => 'md5hashes',
  'db_host' => '127.0.0.1',
  'db_user' => 'mysql',
  'db_pass' => 'mysql',
];

$hash = $_POST['hash'];

$dsn = 'mysql:dbname='.$config['db_name'].';host='.$config['db_host'];
$pdo = new PDO($dsn, $config['db_user'], $config['db_pass']);
$stmt = $pdo->prepare('SELECT * FROM `rainbow_table` WHERE `hash` = :hash')
$stmt->execute(['hash' => $hash]);
if ($stmt->rowCount() > 0) {
  $row = $stmt->fetch(PDO::FETCH_ASSOC);
  echo 'Хэш найден: '.$row['pass'];
} else {
  echo 'Хэш не найден';
}


Для того, чтобы заполнить таблицу создайте файл words.txt, в котором на каждой строке будет один пароль

$dsn = 'mysql:dbname='.$config['db_name'].';host='.$config['db_host'];
$pdo = new PDO($dsn, $config['db_user'], $config['db_pass']);
$stmt = $pdo->prepare('INSERT INTO `rainbow_table` (`pass`, `hash`) VALUES (:pass, :hash)');

$fp = fopen('words.txt', 'r');
if ($fp) {
  while (($buffer = fgets($fp)) !== false) {
    $stmt->execute(['pass' => $buffer, 'hash' => md5($buffer)]);
  }
  if (!feof($fp)) {
    echo "Ошибка: fgets() неожиданно потерпел неудачу\n";
  }
  fclose($fp);
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Sanes
@Sanes
Я не могу додуматься как сделать расшифровщик хэшей, на некоторых сайтах есть.

Хеш невозможно расшифровать. Для этого используют словари известных хешей.
Храните в базе данных и используйте поиск.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы