Генератор хешів md5, sha1, sha256, sha512
Рахує пʼять хешів одного тексту одразу, у браузері. Для паролів не підходить, і нижче написано чому.
Рахує контрольну суму, не відкриваючи термінал
Перевірити контрольну суму завантаженого файлу, порахувати ключ кешу, порівняти підпис вебхука з документацією. Інструмент рахує md5, sha1, sha256, sha512 і crc32 одного й того самого тексту одразу таблицею, кожен копіюється окремо. Усе в браузері.
Одна функція hash приймає назву алгоритму й дані; md5 і sha1 мають окремі функції для зручності, crc32 повертає число. hash_file рахує хеш файлу потоково, hash_hmac додає секрет, hash_equals безпечно порівнює два хеші. Список алгоритмів на сервері дає hash_algos().
echo hash('sha256', 'phpukraine');
// 6d7f… 64 символи hex
echo hash_file('sha256', 'release.tar.gz'); // без завантаження файлу в памʼять
$signature = hash_hmac('sha256', $payload, $webhookSecret);
if (! hash_equals($signature, $request->header('X-Signature'))) {
abort(403);
}
Жоден із цих алгоритмів не підходить для паролів: вони швидкі, а для паролів потрібна повільна функція із сіллю. Для паролів є password_hash з bcrypt чи argon2id. md5 і sha1 ще й криптографічно зламані: колізії для них будуються за хвилини, тому вони годяться лише як контрольна сума для нечутливих даних.
Що питають про цей інструмент
Для ключів кешу, ETag, дедуплікації файлів, де ніхто не намагається підібрати колізію навмисно. Він короткий і швидкий. Але для підпису запитів, перевірки цілісності завантажень чи будь-чого, де є зловмисник, беріть sha256.
hash_file('sha256', $path) читає файл потоково і не завантажує його в памʼять. У консолі те саме дає sha256sum. Порівнювати хеші треба через hash_equals, а не ==, щоб не залежати від часу порівняння.
Коли потрібно перевірити, що дані прийшли від того, хто знає секрет: підпис вебхука, токен посилання. hash_hmac('sha256', $data, $secret) дає хеш, який без секрету не підробити, тоді як звичайний sha256 порахує будь-хто.