Private KeeperPrivate Keeper
in-Line Kit/Функции in-Line Kit

Контрольные суммы и ключи

SHA, BLAKE, HMAC, PBKDF2, scrypt, BCrypt, Argon2, случайные байты и UUID с точным назначением и ограничениями.

Внешне все функции этой страницы возвращают строку, но назначение у строк разное. Простая контрольная сумма обнаруживает изменение данных, HMAC подтверждает знание общего ключа, парольные функции замедляют перебор, а UUID только создаёт удобный идентификатор. Запись вызовов соответствует общей форме функций in-Line.

Что выбрать

Сравнить содержимое

SHA256, SHA2HASH, SHA3HASH, BLAKE2BENCODE и другие контрольные суммы дают одинаковый результат для одинаковых байтов. Они не содержат секретного ключа.

Подтвердить отправителя

HMAC использует общий секретный ключ. BLAKE3ENCODE в текущем исполнителе доступна только в ключевом режиме.

Обработать пароль

PBKDF2KEY, SCRYPT, BCRYPT и ARGON2HASH специально расходуют время, а scrypt и Argon2 ещё и память.

Создать метку

UUIDV4 создаёт идентификатор. RANDOMBYTES возвращает массив псевдослучайных чисел, но не подходит для секретных ключей и солей.

Границы безопасности

Обычный хеш не подходит для хранения пароля

MD5, SHA и BLAKE вычисляются слишком быстро и не содержат уникальной соли. Для пароля используйте предназначенную для этого функцию с отдельной случайной солью и сохраняйте вместе с результатом все параметры вычисления.

Контрольная сумма

Отвечает на вопрос «совпадают ли данные». Любой человек, знающий сообщение, может вычислить тот же результат.

HMAC

Отвечает на вопрос «знал ли отправитель общий ключ». Результат не шифрует сообщение и не скрывает его.

Парольная функция

Создаёт дорогой для перебора результат из пароля и соли. Проверка требует тех же параметров, а не расшифровки.

JSON сначала проходит обычные подстановки in-Line. Если пароль, ключ, соль или сообщение берутся из переменной, подготовьте значение через ESCJSON, иначе кавычка или обратная косая черта может разрушить объект.

Простые контрольные суммы

Эти четыре функции принимают только текст, выполняют вложенные значения и возвращают шестнадцатеричную строку в нижнем регистре.

MD5

(|MD5|demo|MD5|)

Результат:

fe01ce2a7fbac8fafaed7c982a04e229

SHA1

(|SHA1|demo|SHA1|)

Результат:

89e495e7941cf9e40e6980d14a16bf023ccd4c91

MD5 и SHA-1 оставлены для совместимости с внешним договором. Не выбирайте их для новой проверки безопасности, подписи или хранения пароля.

Настраиваемая SHA-2: SHA2HASH

SHA2HASH принимает объект только с полями text, hashSizeBits и outputFormat. Неизвестное или повторяющееся поле возвращает ошибку.

(|SHA2HASH|{"text":"demo","hashSizeBits":256,"outputFormat":"hexa"}|SHA2HASH|)

Результат:

2A97516C354B68848CDBD8F54A226A0A55B21ED138E207AD6C5CBB9C00AA5AEA

В отличие от простой SHA256, шестнадцатеричный результат SHA2HASH использует верхний регистр.

text

Обязательная строка. Перед вычислением она превращается в байты UTF-8.

hashSizeBits

Необязательное целое: ровно 256, 384 или 512. По умолчанию 256.

outputFormat

hexa, base64, base64url, base32 или bytes без учёта регистра. По умолчанию hexa.

bytes возвращает JSON-массив целых чисел от 0 до 255. base64url заменяет + и / на - и _, но сохраняет конечные знаки =. Неверный объект возвращает строку с началом Error: .

SHA-3 и расширяемый результат: SHA3HASH

(|SHA3HASH|{"text":"demo","type":"sha","hashSizeBits":256,"outputFormat":"hexa","version":256}|SHA3HASH|)

Результат:

7F23E6CA181CC91D57245809EDB1097A1F14ED011E4A9520A8DD10AA3EF82789

Обязателен только text. Остальные поля имеют значения по умолчанию:

Обычный SHA-3

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 байта в шестнадцатеричной форме.

(|BLAKE2BENCODE|SEO_AUDIT_2026|BLAKE2BENCODE|)

WHIRLPOOLENCODE

Использует Whirlpool и возвращает 64 байта в шестнадцатеричной форме.

(|WHIRLPOOLENCODE|BrandSafetyCheck|WHIRLPOOLENCODE|)

XXHASHENCODE

Использует xxHash32 и возвращает всего 4 байта. Это быстрая незащищённая контрольная сумма для таблиц и разбиения данных, а не средство безопасности.

(|XXHASHENCODE|feed/products?page=4|XXHASHENCODE|)

KECCAK256HASH

Использует Keccak-256 и возвращает 32 байта. Keccak-256 и стандартизованный SHA3-256 имеют разные правила дополнения и дают разные результаты.

(|KECCAK256HASH|wallet-checksum-demo|KECCAK256HASH|)

Ключевой BLAKE3: BLAKE3ENCODE

BLAKE3ENCODE принимает объект с message и ключом key в шестнадцатеричной форме.

(|BLAKE3ENCODE|{"message":"demo","key":"00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff"}|BLAKE3ENCODE|)

Результат:

0DBC850AE7FF1B987BAAF1AD7BE3AED2705DD79AFABD09DF3D5571C397AC2E2D

Ключ должен содержать 32 байта, то есть 64 шестнадцатеричных знака 0–9, A–F или a–f. Хотя разбор объекта считает key необязательным, без него объект BLAKE3 не создаётся и вычисление возвращает Error: ...; для действующего исполнителя ключ фактически обязателен. Преобразователь ключа не проверяет число успешно прочитанных байтов, поэтому посторонний знак может исказить ключ без понятной ошибки.

Ключ не должен быть примером из документации

Строка выше показывает только форму. Для реальной проверки подлинности используйте отдельный секретный ключ из надёжного источника и не записывайте его в журнал.

Имитационный код: HMAC

HMAC подтверждает сообщение общим секретным ключом. Он не шифрует сообщение и не предназначен для хранения паролей.

(|HMAC|{"algorithm":"SHA256","key":"secret","message":"demo","outputFormat":"hexa"}|HMAC|)

Результат:

3F460143232A115E9A9E18C93BC859A62ABD3F32A486CD1F74FB53445BC72855

algorithm, key и message обязательны. Имя алгоритма приводится к верхнему регистру, поэтому регистр входа не важен.

MD2, MD4, MD5
SHA1, SHA224, SHA256, SHA384, SHA512, SHA512/224, SHA512/256
RIPEMD128, RIPEMD160
KECCAK224, KECCAK256, KECCAK384, KECCAK512
SHA3-224, SHA3-256, SHA3-384, SHA3-512
GOST3411-2012-256, GOST3411-2012-512
BLAKE2B-256, BLAKE2B-512
TIGER

KECCAK288, указанный в прежней справке, исполнителем не поддерживается. MD2, MD4, MD5 и SHA-1 выбирайте только когда этого требует внешний договор.

outputFormat по умолчанию равен hexa. Значение base64 возвращает Base64 без переводов строк, plaintext пытается прочитать произвольные байты кода как UTF-8, а любое другое значение молча выбирает шестнадцатеричную форму. Для двоичного результата используйте hexa или base64.

Для TIGER доступны дополнительные целые поля: hashSize равен 16, 20 или 24 байтам, по умолчанию 24; rounds по умолчанию 3. Ошибки возвращаются с началом Error: .

Описание построения и требований к ключу находится в RFC 2104.

Пароли и производные ключи

PBKDF2KEY

Совместимый с большим числом протоколов производный ключ. Нагрузка в основном задаётся числом итераций.

SCRYPT

Производный ключ с заметным расходом памяти; точные N, r и p должны совпадать у всех участников.

BCRYPT

Самодостаточная строка пароля с солью и стоимостью. При отсутствии явной соли каждый вызов даёт другую корректную строку.

ARGON2HASH

Настраиваемая память, число проходов и параллелизм, но текущая обвязка имеет отдельное ограничение полей пароля и соли.

Соль не обязана быть секретной, но должна быть отдельной и уникальной для каждого пароля. RANDOMBYTES с этой страницы не является защищённым источником случайности.

Производный ключ PBKDF2: PBKDF2KEY

(|PBKDF2KEY|{"text":"demo","salt":"salt123","keyLength":256,"hashSizeBits":256,"counter":10000,"hashFunction":"sha2","outputFormat":"hexa"}|PBKDF2KEY|)

Результат:

1666fe3c298eeb2536a12df117ab1eea36e15c4e60a837fd9ae26167db77a6b7
Обязательные поля

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 для производных ключей описан в NIST SP 800-132.

Производный ключ scrypt: SCRYPT

(|SCRYPT|{"password":"demo","salt":"salt123","N":16384,"r":8,"p":1,"outputSize":32}|SCRYPT|)

Ожидаемый результат для этих точных данных:

6FEEBF483F338E2F2A7800177AB8E32DFE62D51E9C1AD2F589403095924174C1

password, salt, N, r и p обязательны. Пароль и соль превращаются в UTF-8. outputSize задаёт число байтов результата, по умолчанию 64; шестнадцатеричная строка вдвое длиннее.

N должен быть степенью двойки больше единицы, r и p — положительными целыми в пределах библиотеки. Основная память вычисления примерно равна 128 × N × r байтам: при N=16384 и r=8 это около 16 МиБ на один одновременный вызов.

Пустая строка также означает ошибку

Ошибки разбора обычно возвращаются как SCrypt error: ..., но часть ошибок создания или получения ключа может завершиться пустым результатом. Принимайте только строку ожидаемой шестнадцатеричной длины.

Параметры и контрольные примеры scrypt определены в RFC 7914.

Строка пароля BCrypt: BCRYPT

(|BCRYPT|{"text":"demo","cost":10}|BCRYPT|)

При отсутствии salt функция создаёт новую случайную соль. Результат каждый раз различается, имеет 60 знаков и начинается с $2a$10$; в строке уже находятся вид алгоритма, стоимость и соль.

text

Обязательная строка пароля. Неизвестные и повторяющиеся поля объекта запрещены.

cost

Необязательное целое от 4 до 31, по умолчанию 10. Каждый следующий шаг примерно удваивает работу, поэтому не увеличивайте значение без замера.

Явная соль нужна только для внешнего договора с заранее заданными байтами. Она должна содержать ровно 16 байт:

(|BCRYPT|{"text":"demo","cost":10,"salt":{"encoding":"hex","value":"000102030405060708090a0b0c0d0e0f"}}|BCRYPT|)

Допустима форма {"encoding":"hex","value":"..."}, канонический Base64 из 24 знаков с конечными == или JSON-массив ровно из 16 целых чисел 0..255. Имена hex и base64 чувствительны к регистру.

Не сравнивайте два заново созданных хеша

Из-за новой соли одинаковый пароль обычно даёт разные строки. Для проверки нужна функция BCrypt, которая читает соль и стоимость из сохранённой строки; отдельной функции проверки в in-Line Kit нет.

Если аргумент после пробелов не начинается с {, исполнитель принимает весь текст как пароль со стоимостью 10. Для новых сценариев всегда используйте объект JSON: так опечатка в структуре не превращается незаметно в другой пароль. Ошибка объекта или соли завершает выполнение исключением, а не строкой Error:.

Argon2: ARGON2HASH

Пример с явными параметрами:

(|ARGON2HASH|{"password":"demo","salt":"salt123","iterations":2,"memory":65536,"parallelism":1,"type":"Argon2id","version":"1.3","outputLength":32}|ARGON2HASH|)

Для этих точных данных прежняя справка приводит результат:

F93E5BA3CA100DB943168CF43533D89F8E40A8736D47AE2C068E3A8A6C5301FF

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: ....

Официальный договор и рекомендуемые наборы параметров приведены в RFC 9106. В частности, его вариант для ограниченной памяти использует Argon2id 1.3, 64 МиБ и три прохода; значение iterations:2 по умолчанию в функции с ним не совпадает.

Случайные данные и идентификатор

RANDOMBYTES

(|RANDOMBYTES|16|RANDOMBYTES|)

Результат — JSON-массив из 16 целых чисел от 0 до 255, например:

[31,204,8,119,82,17,240,63,10,91,155,2,77,188,45,9]

Аргумент преобразуется в обычное целое без верхней границы; 0 возвращает [], отрицательное, нечисловое или слишком большое значение завершает вызов ошибкой либо нехваткой памяти.

RANDOMBYTES не является защищённым генератором

Каждый байт создаётся обычной функцией Random(256) из общего состояния программы. Не используйте результат для паролей, ключей, начальных векторов, токенов, солей и других секретов.