sha256 хэш столкновения между двумя строками - PullRequest
0 голосов
/ 31 октября 2018

Мне нужно найти две строки, которые передаются в URL как параметр 'str1' и 'str2' и удовлетворяют этим условиям?

if($_GET['str1'] !== $_GET['str2'] and $_GET['str1'] and $_GET['str2']) 
{
    $hash1 = hash('sha256', $salt . $_GET['str1']);
    $hash2 = hash('sha256', $salt . $_GET['str2']);

    if($hash1 === $hash2) {
       #print str1 and str2
    }

}

Как я узнаю?

1 Ответ

0 голосов
/ 31 октября 2018

Единственное возможное решение для взлома - не работать хеш-функции.
Хэш-функция ожидает ввода строки (или преобразования типа в строку), поэтому выполнение ввода в виде массива нарушит хеш, и оба вернут false / не работают.
Значение обоих строго одинаково.

Это чит, но он удовлетворяет всем частям кода, как в настоящее время.

<?php
$_GET['str1'] = ["a"];
$_GET['str2'] = ["b"];
$salt = "aaabdnelnFnekknfn";

if($_GET['str1'] !== $_GET['str2'] and $_GET['str1'] and $_GET['str2']) 
{
    $hash1 = hash('sha256', $salt . $_GET['str1']);
    $hash2 = hash('sha256', $salt . $_GET['str2']);

    if($hash1 === $hash2) {
       var_dump($_GET['str1'],$_GET['str2']);
    }

}

https://3v4l.org/SPYKb

...