Не совсем. Они могут взять новый введенный вами пароль, изменить символ и проверить хеш измененного пароля по сохраненному хешу. Повторите это для ряда незначительных изменений, например, изменение / вставка / удаление отдельного символа, и если какой-либо из сгенерированных хэшей равен сохраненному, выдайте ошибку, которую вы видите.
Пример. Скажите, что ваш старый пароль - «пароль», и вы пытаетесь изменить его на «pssword». Вставьте «а» после «р» дает вам «пароль», который хэширует то же самое, что и старый пароль. Поэтому, не зная старого пароля, а только хеш, мы определили, что пароли похожи.
Для пароля длиной N это генерирует и сравнивает O (3N) = O (N) хэшей. Предполагая, что для вычисления хэша требуется O (N), общая сложность будет равна O (N ^ 2), что очень удобно для паролей вплоть до 1000 символов.
Существует очень редкий шанс столкновения хешей, и чем больше изменений они считают похожими, тем выше этот шанс. Но это все еще редкость.
Обратите внимание, что это не гарантирует надежного хранения паролей. Это просто означает, что вы не можете прийти к выводу, что они не надежно хранятся.