Хеши, HMAC и bcrypt: объяснение
У хеша нет ключа, HMAC использует секретный ключ для аутентификации сообщения, bcrypt — хеширование паролей с солью. Ни одна операция не является шифрованием.
Отличайте хеш от аутентификации
SHA-256 и SHA-512 дают хеш фиксированного размера от точных байтов ввода. Хеш из недоверенного канала не устанавливает автора файла. HMAC-SHA-256 и HMAC-SHA-512 объединяют сообщение с секретным ключом; любой знающий ключ может создать корректный тег. Храните ключи в секрете и проверяйте теги подходящей процедурой постоянного времени.
MD5 — только для устаревших задач
MD5 имеет практически используемые коллизионные слабости. Он сохранён для совместимости со старыми форматами, а не для подписей, защищённых проверок целостности или хранения паролей. Быстрые хеши SHA-256 и SHA-512 сами по себе тоже не подходят для хранения паролей. Кодирование Base64 или hex не делает значение секретным.
Разберитесь в ограничениях bcrypt
bcrypt создаёт хеш с солью и предоставляет отдельную проверку. Прототип запускает его после явного действия в ограниченном Worker, создаёт хеши со стоимостью 10–12 и отклоняет ввод более 72 байт UTF-8, а не молча усекает его. Проверка принимает ограниченный диапазон прежних стоимостей; это не рекомендация таких параметров для новых баз.
Рабочая область на этом сайте
Прототип хеширует точный текст UTF-8 без нормализации. Переносы строк, пробелы и разные представления Unicode могут менять результат. Бинарные файлы не хешируются. Эта рабочая область имеет общий origin браузера utilitiesnewbie.com с публичными страницами, которые могут загружать рекламные скрипты. Другой путь и ограничительная политика документа не создают границу отдельного origin. Код приложения не загружает ввод на сервер и не сохраняет его автоматически. Копирование и скачивание — явные действия, создающие данные вне рабочей области. Хостинг может добавлять платформенные скрипты, а устройства и расширения могут получать доступ к данным. Используйте тестовые значения; никогда не вводите действующий пароль учётной записи или конфиденциальные файлы. В этом руководстве нет полей для секретов и функции детерминированного получения паролей из мастер-пароля.
Пример: публичный вектор SHA-256
Буквальный текст abc имеет байты UTF-8 61 62 63 в шестнадцатеричном виде. Без перевода строки и внешних кавычек SHA-256 даёт показанные 64 hex-символа. Перевод строки меняет байты и хеш. Этот публичный тест проверяет воспроизводимость, а не личность отправителя.
Ожидаемый результат: SHA-256 текста abc без перевода строки:
ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015adПример: считайте байты, а не видимые символы
Предварительно составленный символ é (U+00E9) занимает два байта UTF-8. При повторении 36 раз получается 36 × 2 = 72 байт — в пределах bcrypt прототипа. При повторении 37 раз получится 74 байта, что должно отклоняться. Визуально похожая последовательность e + U+0301 занимает три байта; прототип не выполняет нормализацию. Эти повторяемые публичные строки — тестовые данные, а не предлагаемые пароли.
Ожидаемый результат: 36 × 2 = 72 байт: проверка длины пройдена; 37 × 2 = 74 байт: отклоняется.
Открыть рабочую область
Открывается на английском. Ввод и файлы из инструмента не передаются. https://utilitiesnewbie.com/workspace/private/
Открыть рабочую областьИнструменты не отменяют ваши законные права и наши обязанности. Неприкосновенность от ответственности или гарантия безопасности не обещаются.