• Возможно ли дехеширование при определенных условиях?

    zagayevskiy
    @zagayevskiy
    Android developer at Yandex
    Можно подобрать, это 16^64 = 2^256 комбинаций.
    Алгоритм:
    for (i = 0; i < 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff; ++i) {
       if (sha256(i) == your_hash) return i
    }

    Всего-то 115792089237316195423570985008687907853269984665640564039457584007913129639936 вариантов.

    Нет, нельзя, конечно. Они для этого были придуманы, чтобы нельзя это было сделать. Символы не маппятся один в другой, в общем случае никаких там "чуть ли не шесть возможных исходных символов" нет. Бесконечное множество маппится в конечное.
    Ответ написан
    6 комментариев
  • Возможно ли дехеширование при определенных условиях?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Хэширование, в общем случае, необратимо, потому что сам алгоритм хэширования не гарантирует взаимно-однозначного соответствия исходных данных и их хэша.
    Если исходные данные по размеру больше хэша, то очевидно, что найдётся несколько различных исходных данных с одинаковыми хэшами. Например, хэш-функция выдаёт 0 или 1 (один бит), а на вход поступили цифры от 0 до 7 (три бита).
    Если размер данных меньше или равен размеру хэша, то зависит от алгоритма. Промышленные алгоритмы строятся с хорошей равномерностью распределения хэшей, поэтому можно допустить, что на таких данных функция хэширования имеет примерно однозначное соответствие.
    Но, в любом случае, у функции хэширования нет простого алгоритма обратного преобразования.
    Ответ написан
    Комментировать