Не впевнений, що MD5 є правильним вибором для вас, але я вважаю,
що у вас є підстави дотримуватися цього алгоритму і шукаєте коротше
подання. Існує кілька можливостей для створення коротшого рядка з
різними алфавітами:
Варіант 1: Двійковий рядок
Найкоротший формат MD5 - це бінарне подання, щоб отримати такий
рядок, який можна просто викликати:
$binaryMd5 = md5($input, true);
Цей рядок, який ви можете зберігати як будь-який інший рядок у
базі даних, потрібно лише 16 символів. Просто переконайтеся, що ви
правильно втекли, використовуючи
mysqli_real_escape_string()
або параметризовані запити
(PDO).
Варіант 2: кодування Base64
Кодування Base64 вироблятиме рядок з таким алфавітом: [0-9 A-Z
a-z + /] і використовує '=' як пробій. Це кодування дуже швидко,
але включає іноді небажані символи '+/='.
$base64Md5 = base64_encode(md5($input, true));
Довжина виводу буде дорівнювати 24 символам для хешу MD5.
Варіант 3: кодування Base62
Кодування base62 використовує лише алфавіт [0-9 A-Z a-z]. Такі
рядки можна безпечно використовувати для будь-яких цілей,
наприклад, токенів у URL-адресі, і вони дуже компактні. Я написав
база62 кодер , який може перетворювати двійкові
рядки на алфавіт base62 . Це може бути не найшвидшим можливим
реалізацією, але я мав на меті написання зрозумілого коду. Цей же
клас може бути легко адаптований до різних алфавітів.
$base62Md5 = StoBase62Encoder::base62encode(md5($input, true));
Довжина виводу для хешу MD5 варіюється від 16 до 22
символів.