Подтвердить что ты не робот

Как расшифровать шифрованную строку SHA-256?

У меня есть строка, которая была закодирована с использованием следующего метода, есть ли способ декодировать эту строку до ее исходного значения? Спасибо.

public synchronized String encode(String password)
        throws NoSuchAlgorithmException, IOException {

    String encodedPassword = null;
    byte[] salt = base64ToByte(saltChars);

    MessageDigest digest = MessageDigest.getInstance("SHA-256");
    digest.reset();
    digest.update(salt);

    byte[] btPass = digest.digest(password.getBytes("UTF-8"));
    for (int i = 0; i < ITERATION_COUNT; i++) {
        digest.reset();
        btPass = digest.digest(btPass);
    }

    encodedPassword = byteToBase64(btPass);     
    return encodedPassword;
}

private byte[] base64ToByte(String str) throws IOException {

    BASE64Decoder decoder = new BASE64Decoder();
    byte[] returnbyteArray = decoder.decodeBuffer(str);

    return returnbyteArray;
}

private String byteToBase64(byte[] bt) {

    BASE64Encoder endecoder = new BASE64Encoder();
    String returnString = endecoder.encode(bt);

    return returnString;
}
4b9b3361

Ответ 1

SHA-256 - это криптографическая (односторонняя) хэш-функция, поэтому нет прямого способа его декодирования. Вся цель криптографической хэш-функции состоит в том, что вы не можете ее отменить.

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

Вы можете найти вопрос "Разница между хэшированием пароля и его зашифрованием".

Ответ 2

Следует отметить, что Sha256 не шифрует данные/содержимое вашей строки, вместо этого генерирует хэш фиксированного размера, используя вашу входную строку в качестве семени.

В этом случае я мог бы прокормить содержимое энциклопедии, которая была бы легко размером 100 Мб в размере текста, но результирующая строка все равно была бы размером 256 бит.

Невозможно, чтобы вы изменили хэш, чтобы получить 100 мб данных из хэша фиксированного размера, лучше всего вы можете сделать это, чтобы угадать/вычислить данные семени, хэш, а затем посмотреть, есть ли хэш соответствует хешу, которую вы пытаетесь сломать.

Если вы можете изменить хэш, у вас будет максимальная форма сжатия на сегодняшний день.

Ответ 3

Вы сделали правильную вещь, используя соль aka SSHA.

SHA и SHA-2 (или SHA-256) сами по себе без соли НЕ считаются безопасными! Соление SHA-хэша называется Salted SHA или SSHA.

Ниже приведен простой пример того, насколько легко он де-хэш SHA-1. То же самое можно сделать и для SHA-2 без особых усилий.

Введите пароль в этот URL: http://www.xorbin.com/tools/sha1-hash-calculator Скопируйте хеш в этот URL: http://www.hashkiller.co.uk/sha1-decrypter.aspx

Здесь страница, которая дешифрует SHA-2. Как работают эти страницы, раньше кто-то должен был хэшировать ваш пароль, иначе он не найдет его: md5hashing dot net/hashing/sha256

Здесь страница, которая утверждает, что есть полные таблицы SHA-2, доступные для загрузки для "пожертвования" (я еще не пробовал): crackstation dot net/buy-crackstation-wordlist-password-cracking-dictionary.htm

Вот хорошая статья, в которой объясняется, почему вы должны использовать SSHA над SHA: crackstation dot net/hashing-security.htm

Ответ 4

SHA * - хеш-функция. Он создает представление (хеш) исходных данных. Этот хеш никогда не предназначен для воссоздания исходных данных. При этом это не шифрование. Скорее, одна и та же функция хеширования может использоваться в двух разных местах на одних и тех же исходных данных, чтобы увидеть, создается ли тот же хеш. Этот метод обычно используется для проверки пароля.