Поиск публикаций
Криптография
Полное руководство по криптографическим функциям WDSP
Содержание
Хеширование
крипто.хэш(алгоритм, данные)
Вычисляет хеш-сумму от данных по указанному алгоритму.
Возвращает: строка (шестнадцатеричное представление хеша)
Пример:
$хеш256 = крипто.хэш("sha256", "Привет, мир!"); вывод("SHA256: " + $хеш256);
Случайные байты
крипто.случайныеБайты(количество)
Генерирует криптостойкую последовательность случайных байт заданной длины.
Возвращает: строка (шестнадцатеричное представление случайных байт)
Пример:
$соль = крипто.случайныеБайты(16); // 16 байт = 32 hex-символа
PBKDF2 – получение ключа из пароля
крипто.изПароля(пароль, соль, итерации, длина)
Вычисляет криптографический ключ на основе пароля, соли и количества итераций по алгоритму PBKDF2 (с HMAC-SHA256).
Возвращает: строка (шестнадцатеричное представление ключа)
Важно: соль должна быть уникальной для каждого пароля и храниться вместе с результатом. Количество итераций должно быть достаточно большим для защиты от перебора.
Пример:
$соль = крипто.случайныеБайты(16); $ключ = крипто.изПароля("мойПароль", $соль, 10000, 32);
HMAC – ключевое хеширование
крипто.hmac(алгоритм, ключ, данные)
Вычисляет код аутентификации сообщения (HMAC) по указанному алгоритму.
Возвращает: строка (шестнадцатеричное представление HMAC)
Пример:
$ключ = крипто.случайныеБайты(32); $hmac = крипто.hmac("sha256", $ключ, "Сообщение");
Шифрование AES-256-GCM
крипто.шифровать(алгоритм, ключ, данные [, iv])
Шифрует данные с использованием алгоритма AES-256-GCM. Возвращает объект с полями iv, tag, ciphertext.
Возвращает: объект со свойствами:
iv– вектор инициализации (hex)tag– тег аутентификации (16 байт, hex)ciphertext– зашифрованные данные (hex)
Важно: IV должен быть уникальным для каждого шифрования с одним и тем же ключом. Храните IV и тег вместе с зашифрованным текстом.
Пример:
$ключ = крипто.случайныеБайты(32); $шифровано = крипто.шифровать("aes-256-gcm", $ключ, "Секретные данные"); // $шифровано.iv, $шифровано.tag, $шифровано.ciphertext
Расшифрование AES-256-GCM
крипто.расшифровать(алгоритм, ключ, объект)
Расшифровывает данные, зашифрованные функцией шифровать.
Возвращает: строка (исходный открытый текст)
Пример:
$расшифровано = крипто.расшифровать("aes-256-gcm", $ключ, $шифровано);
Преобразование hex ↔ base64
крипто.hexВBase64(hex)
Преобразует шестнадцатеричную строку в Base64.
Возвращает: строка в Base64
крипто.base64ВHex(base64)
Преобразует строку Base64 обратно в шестнадцатеричное представление.
Возвращает: шестнадцатеричная строка
Пример:
$hex = "48656c6c6f"; $b64 = крипто.hexВBase64($hex); // "SGVsbG8=" $обратно = крипто.base64ВHex($b64); // "48656c6c6f"
Полный пример теста
Ниже приведён полный тестовый скрипт, демонстрирующий все функции модуля:
вывод("=== Тест модуля криптографии ===\n"); $текст = "Привет, мир!"; // 1. Хеш SHA256 $хеш256 = крипто.хэш("sha256", $текст); вывод("1. SHA256 хеш: " + $хеш256 + "\n"); // 2. Хеш SHA512 $хеш512 = крипто.хэш("sha512", $текст); вывод("2. SHA512 хеш: " + $хеш512 + "\n"); // 3. Случайные байты $случайные = крипто.случайныеБайты(16); вывод("3. Случайные 16 байт: " + $случайные + "\n"); // 4. PBKDF2 $пароль = "секретныйПароль123"; $соль = крипто.случайныеБайты(16); $ключИзПароля = крипто.изПароля($пароль, $соль, 10000, 32); вывод("4. Ключ из пароля (32 байта): " + $ключИзПароля + "\n"); // 5. HMAC-SHA256 $ключ = крипто.случайныеБайты(32); $hmac256 = крипто.hmac("sha256", $ключ, $текст); вывод("5. HMAC-SHA256: " + $hmac256 + "\n"); // 6. HMAC-SHA512 $hmac512 = крипто.hmac("sha512", $ключ, $текст); вывод("6. HMAC-SHA512: " + $hmac512 + "\n"); // 7. Шифрование AES-256-GCM $данные = "Секретные данные для теста!"; $шифровано = крипто.шифровать("aes-256-gcm", $ключ, $данные); вывод("7. Зашифровано:\n IV: " + $шифровано.iv + "\n Тег: " + $шифровано.tag + "\n Шифротекст: " + $шифровано.ciphertext + "\n"); // 8. Расшифрование $расшифровано = крипто.расшифровать("aes-256-gcm", $ключ, $шифровано); вывод("8. Расшифровано: " + $расшифровано + "\n"); если ($расшифровано == $данные) { вывод(" Результат: OK\n"); } иначе { вывод(" Результат: ОШИБКА\n"); } // 9. Преобразование hex <-> base64 $hex = $хеш256; $base64 = крипто.hexВBase64($hex); $обратноHex = крипто.base64ВHex($base64); вывод("9. Hex: " + $hex + "\n"); вывод(" Base64: " + $base64 + "\n"); вывод(" Обратно в Hex: " + $обратноHex + "\n"); если ($обратноHex == $hex) { вывод(" Преобразование корректно\n"); } иначе { вывод(" Ошибка преобразования\n"); } // 10. Шифрование без IV (автогенерация) $шифровано2 = крипто.шифровать("aes-256-gcm", $ключ, "Тест без IV"); вывод("10. Шифрование без IV: IV = " + $шифровано2.iv + "\n"); $расшифровано2 = крипто.расшифровать("aes-256-gcm", $ключ, $шифровано2); если ($расшифровано2 == "Тест без IV") { вывод(" Расшифровка успешна\n"); } иначе { вывод(" Ошибка расшифровки\n"); } вывод("=== Тест криптографии завершён ===\n");