Шифрование и подпись
Шифрование и подпись
Заголовок раздела «Шифрование и подпись»Криптографические операции: шифрование, HMAC, JWT и деривация ключей. Адаптировано для использования в workflow.
Подключение
Заголовок раздела «Подключение»local crypto = require("crypto")Генерация случайных данных
Заголовок раздела «Генерация случайных данных»Случайные байты
Заголовок раздела «Случайные байты»local bytes, err = crypto.random.bytes(32)| Параметр | Тип | Описание |
|---|---|---|
length | integer | Количество байт (1 – 1 048 576) |
Возвращает: string, error
Случайная строка
Заголовок раздела «Случайная строка»local str, err = crypto.random.string(32)local str, err = crypto.random.string(32, "0123456789abcdef")| Параметр | Тип | Описание |
|---|---|---|
length | integer | Длина строки (1 – 1 048 576) |
charset | string? | Набор символов (по умолчанию буквы и цифры) |
Возвращает: string, error
Случайный UUID
Заголовок раздела «Случайный UUID»local id, err = crypto.random.uuid()Возвращает: string, error
HMAC-SHA256
Заголовок раздела «HMAC-SHA256»local hex, err = crypto.hmac.sha256(key, data)| Параметр | Тип | Описание |
|---|---|---|
key | string | Ключ HMAC |
data | string | Данные для аутентификации |
Возвращает: string, error
HMAC-SHA512
Заголовок раздела «HMAC-SHA512»local hex, err = crypto.hmac.sha512(key, data)| Параметр | Тип | Описание |
|---|---|---|
key | string | Ключ HMAC |
data | string | Данные для аутентификации |
Возвращает: string, error
Шифрование
Заголовок раздела «Шифрование»AES-GCM {id=“encrypt-aes-gcm”}
Заголовок раздела «AES-GCM {id=“encrypt-aes-gcm”}»local encrypted, err = crypto.encrypt.aes(data, key)local encrypted, err = crypto.encrypt.aes(data, key, aad)| Параметр | Тип | Описание |
|---|---|---|
data | string | Открытый текст |
key | string | 16, 24 или 32 байта (AES-128/192/256) |
aad | string? | Дополнительные аутентифицируемые данные |
Возвращает: string, error — nonce в начале результата
ChaCha20-Poly1305 {id=“encrypt-chacha20”}
Заголовок раздела «ChaCha20-Poly1305 {id=“encrypt-chacha20”}»local encrypted, err = crypto.encrypt.chacha20(data, key)local encrypted, err = crypto.encrypt.chacha20(data, key, aad)| Параметр | Тип | Описание |
|---|---|---|
data | string | Открытый текст |
key | string | Ровно 32 байта |
aad | string? | Дополнительные аутентифицируемые данные |
Возвращает: string, error
Расшифрование
Заголовок раздела «Расшифрование»AES-GCM {id=“decrypt-aes-gcm”}
Заголовок раздела «AES-GCM {id=“decrypt-aes-gcm”}»local plaintext, err = crypto.decrypt.aes(encrypted, key)local plaintext, err = crypto.decrypt.aes(encrypted, key, aad)| Параметр | Тип | Описание |
|---|---|---|
data | string | Зашифрованные данные из encrypt.aes |
key | string | Тот же ключ, что при шифровании |
aad | string? | Должен совпадать с AAD при шифровании |
Возвращает: string, error
ChaCha20-Poly1305 {id=“decrypt-chacha20”}
Заголовок раздела «ChaCha20-Poly1305 {id=“decrypt-chacha20”}»local plaintext, err = crypto.decrypt.chacha20(encrypted, key)local plaintext, err = crypto.decrypt.chacha20(encrypted, key, aad)| Параметр | Тип | Описание |
|---|---|---|
data | string | Зашифрованные данные из encrypt.chacha20 |
key | string | Тот же ключ, что при шифровании |
aad | string? | Должен совпадать с AAD при шифровании |
Возвращает: string, error
Кодирование
Заголовок раздела «Кодирование»local token, err = crypto.jwt.encode(payload, secret)local token, err = crypto.jwt.encode(payload, secret, "HS256")local token, err = crypto.jwt.encode(payload, private_key_pem, "RS256")| Параметр | Тип | Описание |
|---|---|---|
payload | table | JWT claims (поле _header для пользовательского заголовка) |
key | string | Секрет (HMAC) или приватный ключ PEM (RSA) |
alg | string? | HS256, HS384, HS512, RS256 (по умолчанию HS256) |
Возвращает: string, error
Проверка
Заголовок раздела «Проверка»local claims, err = crypto.jwt.verify(token, secret)local claims, err = crypto.jwt.verify(token, secret, "HS256", false)local claims, err = crypto.jwt.verify(token, public_key_pem, "RS256")| Параметр | Тип | Описание |
|---|---|---|
token | string | JWT-токен для проверки |
key | string | Секрет (HMAC) или публичный ключ PEM (RSA) |
alg | string? | Ожидаемый алгоритм (по умолчанию HS256) |
require_exp | boolean? | Проверять срок действия (по умолчанию true) |
Возвращает: table, error
Деривация ключей
Заголовок раздела «Деривация ключей»local key, err = crypto.pbkdf2(password, salt, iterations, key_length)local key, err = crypto.pbkdf2(password, salt, iterations, key_length, "sha512")| Параметр | Тип | Описание |
|---|---|---|
password | string | Пароль или парольная фраза |
salt | string | Соль |
iterations | integer | Количество итераций (максимум 10 000 000) |
key_length | integer | Желаемая длина ключа в байтах |
hash | string? | sha256 или sha512 (по умолчанию sha256) |
Возвращает: string, error
Утилиты
Заголовок раздела «Утилиты»Сравнение с постоянным временем
Заголовок раздела «Сравнение с постоянным временем»local equal = crypto.constant_time_compare(a, b)| Параметр | Тип | Описание |
|---|---|---|
a | string | Первая строка |
b | string | Вторая строка |
Возвращает: boolean
| Ситуация | Тип | Повтор |
|---|---|---|
| Неверная длина | errors.INVALID | нет |
| Пустой ключ | errors.INVALID | нет |
| Неверный размер ключа | errors.INVALID | нет |
| Ошибка расшифрования | errors.INTERNAL | нет |
| Токен просрочен | errors.INTERNAL | нет |
Подробнее см. Обработка ошибок.