Контрольные суммы и ключи
SHA, BLAKE, HMAC, PBKDF2, scrypt, BCrypt, Argon2, случайные байты и UUID с точным назначением и ограничениями.
Внешне все функции этой страницы возвращают строку, но назначение у строк разное. Простая контрольная сумма обнаруживает изменение данных, HMAC подтверждает знание общего ключа, парольные функции замедляют перебор, а UUID только создаёт удобный идентификатор. Запись вызовов соответствует .
Что выбрать
Сравнить содержимое
SHA256, SHA2HASH, SHA3HASH, BLAKE2BENCODE и другие контрольные суммы дают одинаковый результат для одинаковых байтов. Они не содержат секретного ключа.
Подтвердить отправителя
HMAC использует общий секретный ключ. BLAKE3ENCODE в текущем исполнителе доступна только в ключевом режиме.
Обработать пароль
PBKDF2KEY, SCRYPT, BCRYPT и ARGON2HASH специально расходуют время, а scrypt и Argon2 ещё и память.
Создать метку
UUIDV4 создаёт идентификатор. RANDOMBYTES возвращает массив псевдослучайных чисел, но не подходит для секретных ключей и солей.
Границы безопасности
Обычный хеш не подходит для хранения пароля
MD5, SHA и BLAKE вычисляются слишком быстро и не содержат уникальной соли. Для пароля используйте предназначенную для этого функцию с отдельной случайной солью и сохраняйте вместе с результатом все параметры вычисления.
Отвечает на вопрос «совпадают ли данные». Любой человек, знающий сообщение, может вычислить тот же результат.
Отвечает на вопрос «знал ли отправитель общий ключ». Результат не шифрует сообщение и не скрывает его.
Создаёт дорогой для перебора результат из пароля и соли. Проверка требует тех же параметров, а не расшифровки.
JSON сначала проходит обычные подстановки in-Line. Если пароль, ключ, соль или сообщение берутся из переменной, подготовьте значение через , иначе кавычка или обратная косая черта может разрушить объект.
Простые контрольные суммы
Эти четыре функции принимают только текст, выполняют вложенные значения и возвращают шестнадцатеричную строку в нижнем регистре.
Настраиваемая SHA-2: SHA2HASH
SHA2HASH принимает объект только с полями text, hashSizeBits и outputFormat. Неизвестное или повторяющееся поле возвращает ошибку.
Результат:
В отличие от простой SHA256, шестнадцатеричный результат SHA2HASH использует верхний регистр.
Обязательная строка. Перед вычислением она превращается в байты UTF-8.
Необязательное целое: ровно 256, 384 или 512. По умолчанию 256.
hexa, base64, base64url, base32 или bytes без учёта регистра. По умолчанию hexa.
bytes возвращает JSON-массив целых чисел от 0 до 255. base64url заменяет + и / на - и _, но сохраняет конечные знаки =. Неверный объект возвращает строку с началом Error: .
SHA-3 и расширяемый результат: SHA3HASH
Результат:
Обязателен только text. Остальные поля имеют значения по умолчанию:
type:"sha"; hashSizeBits принимает 224, 256, 384 или 512 бит. По умолчанию 256.
type:"xof"; hashSizeBits трактуется как число байтов, затем умножается на восемь. Значение по умолчанию создаёт 256 байт, а не 256 бит.
outputFormat принимает hexa, base64, base64url или base32. Любое другое значение, включая ошибочно указанное bytes, фактически выбирает hexa; старая справка неверно обещала массив байтов. Поле version по умолчанию равно 256 и передаётся движку SHA-3.
Значение type проверяется неполно
Значение приводится к нижнему регистру, после чего только sha выбирает обычный SHA-3. Любое другое значение попадает в ветвь XOF, поэтому передавайте sha или xof и не рассчитывайте на ошибку при опечатке.
Ошибки разбора и вычисления возвращаются как Error: ....
Другие контрольные суммы
Все четыре функции вычисляют контрольную сумму UTF-8 и при внутренней ошибке возвращают строку с началом Error: .
BLAKE2BENCODE
Использует BLAKE2b-256 и возвращает 32 байта в шестнадцатеричной форме.
WHIRLPOOLENCODE
Использует Whirlpool и возвращает 64 байта в шестнадцатеричной форме.
XXHASHENCODE
Использует xxHash32 и возвращает всего 4 байта. Это быстрая незащищённая контрольная сумма для таблиц и разбиения данных, а не средство безопасности.
KECCAK256HASH
Использует Keccak-256 и возвращает 32 байта. Keccak-256 и стандартизованный SHA3-256 имеют разные правила дополнения и дают разные результаты.
Ключевой BLAKE3: BLAKE3ENCODE
BLAKE3ENCODE принимает объект с message и ключом key в шестнадцатеричной форме.
Результат:
Ключ должен содержать 32 байта, то есть 64 шестнадцатеричных знака 0–9, A–F или a–f. Хотя разбор объекта считает key необязательным, без него объект BLAKE3 не создаётся и вычисление возвращает Error: ...; для действующего исполнителя ключ фактически обязателен. Преобразователь ключа не проверяет число успешно прочитанных байтов, поэтому посторонний знак может исказить ключ без понятной ошибки.
Ключ не должен быть примером из документации
Строка выше показывает только форму. Для реальной проверки подлинности используйте отдельный секретный ключ из надёжного источника и не записывайте его в журнал.
Имитационный код: HMAC
HMAC подтверждает сообщение общим секретным ключом. Он не шифрует сообщение и не предназначен для хранения паролей.
Результат:
algorithm, key и message обязательны. Имя алгоритма приводится к верхнему регистру, поэтому регистр входа не важен.
KECCAK288, указанный в прежней справке, исполнителем не поддерживается. MD2, MD4, MD5 и SHA-1 выбирайте только когда этого требует внешний договор.
outputFormat по умолчанию равен hexa. Значение base64 возвращает Base64 без переводов строк, plaintext пытается прочитать произвольные байты кода как UTF-8, а любое другое значение молча выбирает шестнадцатеричную форму. Для двоичного результата используйте hexa или base64.
Для TIGER доступны дополнительные целые поля: hashSize равен 16, 20 или 24 байтам, по умолчанию 24; rounds по умолчанию 3. Ошибки возвращаются с началом Error: .
Описание построения и требований к ключу находится в .
Пароли и производные ключи
PBKDF2KEY
Совместимый с большим числом протоколов производный ключ. Нагрузка в основном задаётся числом итераций.
SCRYPT
Производный ключ с заметным расходом памяти; точные N, r и p должны совпадать у всех участников.
BCRYPT
Самодостаточная строка пароля с солью и стоимостью. При отсутствии явной соли каждый вызов даёт другую корректную строку.
ARGON2HASH
Настраиваемая память, число проходов и параллелизм, но текущая обвязка имеет отдельное ограничение полей пароля и соли.
Соль не обязана быть секретной, но должна быть отдельной и уникальной для каждого пароля. RANDOMBYTES с этой страницы не является защищённым источником случайности.
Производный ключ PBKDF2: PBKDF2KEY
Результат:
text — пароль или исходный материал, salt — соль. Оба поля являются строками.
textEncoding и saltEncoding: utf8/plaintext, hex/hexa или base64. По умолчанию utf8.
keyLength задаётся в битах, по умолчанию 128; допустимо от 8 до 8192 с кратностью восьми. counter — от 1 до 10000000, по умолчанию 10000.
hashFunction: sha1, sha2 или sha3. Для SHA-1 hashSizeBits должен быть 160; для SHA-2 и SHA-3 доступны 224, 256, 384, 512.
outputFormat принимает hex/hexa или base64. Форматы base64url, base32 и bytes, перечисленные в старой справке, текущей реализацией не поддерживаются.
keyLength измеряется в битах
keyLength:256 создаёт 32 байта. Запись keyLength:32 создаёт только 4 байта, хотя прежняя справка называла это 32 байтами.
Ошибки возвращаются строкой Error: .... Основной договор PBKDF2 для производных ключей описан в .
Производный ключ scrypt: SCRYPT
Ожидаемый результат для этих точных данных:
password, salt, N, r и p обязательны. Пароль и соль превращаются в UTF-8. outputSize задаёт число байтов результата, по умолчанию 64; шестнадцатеричная строка вдвое длиннее.
N должен быть степенью двойки больше единицы, r и p — положительными целыми в пределах библиотеки. Основная память вычисления примерно равна 128 × N × r байтам: при N=16384 и r=8 это около 16 МиБ на один одновременный вызов.
Пустая строка также означает ошибку
Ошибки разбора обычно возвращаются как SCrypt error: ..., но часть ошибок создания или получения ключа может завершиться пустым результатом. Принимайте только строку ожидаемой шестнадцатеричной длины.
Параметры и контрольные примеры scrypt определены в .
Строка пароля BCrypt: BCRYPT
При отсутствии salt функция создаёт новую случайную соль. Результат каждый раз различается, имеет 60 знаков и начинается с $2a$10$; в строке уже находятся вид алгоритма, стоимость и соль.
Обязательная строка пароля. Неизвестные и повторяющиеся поля объекта запрещены.
Необязательное целое от 4 до 31, по умолчанию 10. Каждый следующий шаг примерно удваивает работу, поэтому не увеличивайте значение без замера.
Явная соль нужна только для внешнего договора с заранее заданными байтами. Она должна содержать ровно 16 байт:
Допустима форма {"encoding":"hex","value":"..."}, канонический Base64 из 24 знаков с конечными == или JSON-массив ровно из 16 целых чисел 0..255. Имена hex и base64 чувствительны к регистру.
Не сравнивайте два заново созданных хеша
Из-за новой соли одинаковый пароль обычно даёт разные строки. Для проверки нужна функция BCrypt, которая читает соль и стоимость из сохранённой строки; отдельной функции проверки в in-Line Kit нет.
Если аргумент после пробелов не начинается с {, исполнитель принимает весь текст как пароль со стоимостью 10. Для новых сценариев всегда используйте объект JSON: так опечатка в структуре не превращается незаметно в другой пароль. Ошибка объекта или соли завершает выполнение исключением, а не строкой Error:.
Argon2: ARGON2HASH
Пример с явными параметрами:
Для этих точных данных прежняя справка приводит результат:
password и salt обязательны. Остальные поля:
iterations по умолчанию 2; memory по умолчанию 65536 КиБ; parallelism по умолчанию 1.
type: Argon2d, Argon2i или Argon2id, по умолчанию Argon2id. version: строка 1.0 или 1.3, по умолчанию 1.3.
outputLength — число байтов, по умолчанию 32. Возвращается только шестнадцатеричная строка; соль и параметры в неё не включаются.
secret и additional являются необязательными строками. Все строковые поля реально передаются в Argon2 как UTF-8.
Неизвестное значение type молча выбирает Argon2id; передавайте одно из трёх точных имён. Память выделяется на каждый одновременный вызов, поэтому десять вызовов со значением 65536 могут потребовать около 640 МиБ только для Argon2.
Результат не является самодостаточной строкой проверки: сохраняйте отдельно точную соль, iterations, memory, parallelism, type, version и outputLength. Ошибки возвращаются как Error: ....
Официальный договор и рекомендуемые наборы параметров приведены в . В частности, его вариант для ограниченной памяти использует Argon2id 1.3, 64 МиБ и три прохода; значение iterations:2 по умолчанию в функции с ним не совпадает.
Случайные данные и идентификатор
RANDOMBYTES
Результат — JSON-массив из 16 целых чисел от 0 до 255, например:
Аргумент преобразуется в обычное целое без верхней границы; 0 возвращает [], отрицательное, нечисловое или слишком большое значение завершает вызов ошибкой либо нехваткой памяти.
RANDOMBYTES не является защищённым генератором
Каждый байт создаётся обычной функцией Random(256) из общего состояния программы. Не используйте результат для паролей, ключей, начальных векторов, токенов, солей и других секретов.