Метод isHashed в библиотеке password-hash предназначен
для проверки строки на соответствие формату криптографического хеша
пароля. Его задача заключается не в криптографической верификации, а в
структурном и синтаксическом анализе строки для определения, была ли она
получена в результате хеширования.
Хеши паролей обладают характерными признаками, которые отличают их от обычного текста:
Метод isHashed анализирует строку по совокупности этих
признаков и делает вывод о вероятной принадлежности к хешированным
данным.
В современных реализациях password-hash учитываются наиболее распространённые алгоритмы:
Каждый формат имеет собственную структуру, которую можно определить по шаблону строки.
$2a$, $2b$, $2y$$argon2i$, $argon2d$,
$argon2id$pbkdf2 в явном виде или быть
сериализованнымАлгоритм проверки обычно строится как последовательность эвристик:
Хеши имеют минимальную длину, обусловленную параметрами соли и выходного значения. Короткие строки автоматически исключаются.
Большинство хешей используют:
Недопустимые символы (например, пробелы или кириллица) чаще всего означают, что строка не является хешем.
Используются регулярные выражения, соответствующие известным форматам:
const bcryptPattern = /^\$2[aby]\$\d{2}\$[./A-Za-z0-9]{53}$/;
const argon2Pattern = /^\$argon2(id|i|d)\$/;
Если строка соответствует одному из шаблонов, она классифицируется как хеш.
Некоторые форматы содержат встроенные параметры:
Наличие подобных метаданных усиливает вероятность положительного результата.
Дополнительный этап включает статистическую оценку распределения символов. Хеши характеризуются равномерным распределением, в отличие от текстовых данных.
Типичная сигнатура:
isHashed(value: string): boolean
Возвращаемое значение:
true — строка соответствует одному из поддерживаемых
форматов хешейfalse — строка не обладает признаками хешированного
значенияМетод не гарантирует криптографическую достоверность, поскольку работает на уровне синтаксического анализа.
$2b$12$KIXQe1Y9m0rQ1qvY8eXxOu3c1a2b3c4d5e6f7g8h9i0j1k2l3m4n5
Строка соответствует:
Результат: true
password123
Отсутствуют признаки структуры хеша, высокая семантическая читаемость.
Результат: false
$argon2id$v=19$m=65536,t=3,p=4$Wm9s...$k9d8s7d6s5d4s3d2s1
Наличие параметров алгоритма и сегментов соли и хеша указывает на валидный формат.
Результат: true
Несмотря на высокую точность эвристик, существуют ограничения:
Основной механизм реализации опирается на набор шаблонов:
const patterns = [
/^\$2[aby]\$\d{2}\$[./A-Za-z0-9]{53}$/,
/^\$argon2(id|i|d)\$/,
/^[a-f0-9]{32,}$/i
];
Проверка осуществляется итеративно:
function isHashed(str) {
if (typeof str !== 'string') return false;
return patterns.some((pattern) => pattern.test(str));
}
Метод isHashed используется как вспомогательный
компонент в более крупных процессах:
Некоторые строки находятся в «серой зоне»:
В таких случаях решение принимается на основе совокупности факторов, а не одного признака.
Метод не выполняет декодирование и не обращается к криптографическим функциям. Его работа основана на вероятностной модели классификации строк, где учитываются:
Такой подход обеспечивает высокую скорость работы при допустимом уровне ошибок в редких нестандартных случаях.