Скажу сразу, я далёк от сабжа. И мои рассуждения могут быть в корне не верны.
И так, мой вопрос это как программа дешифровщик (вроде встроенной в архиваторы zip или rar) узнаёт, правильный ли был пароль (ключ)?
Я представляю себе это так:
1. Считаем хеш (например, 10 байтовый хеш) данных и записываем его в конец данных.
2. Обрабатываем полученную смесь функцией шифровальщиком.
crypto = f(data + hash(data), password); // например, так. Оператор плюса условен, он соединяет строки.
Теперь дешифруем:
1. Применяем обратную функцию.
2. Пересчитываем хеш данных, не доходя 10 байт до конца.
3. Сравниваем полученный хеш с последними 10 байтами.
4. Если равен - всё хорошо, нет - всё плохо, пароль не верен.
У меня правильный ход мыслей?