Мне нужно сгенерировать на Kotlin хэш MD5 для некоторых данных, но в виде 16-символьной строки, а не 32-символьной. На данный момент я не нашел способа для этого и нуждаюсь в помощи. Но метод определенно есть, так как я нашел сайт, где это делают правильно.
Например эти сайты:
В качестве контроля я использую эту строку - "1681799732000". Первый сайт выдает правильный ответ из 16 символов — «92AA8DDBE039D480», Вторая ссылка — 32-значную строку — «E292561C92AA8DDBE039D4808CC51159».
Сгенерировать 32-символьный MD5 в Котлине не проблема, а вот 16-символьный — на самом деле.
РЕДАКТИРОВАТЬ 1 - Кодировка предположительно UTF-8
Мне нужно реализовать некоторую функцию входа в систему, которая использует эту строку md5 в каком-то алгоритме. Ссылки, описанные в моем сообщении, делают именно то, что мне нужно, так как у меня есть контрольная строка. То есть это возможно в некотором роде. Пожалуйста, посмотрите ссылку ...md516. Есть кнопка с надписью MD5 Hash_16 Uppercase. Это дает мне правильную строку управления.





Вы не можете сгенерировать 16-символьный хэш MD5, но вы можете попробовать использовать трюк, чтобы получить 16-символьную уникальную строку, если это подходит для вашего варианта использования.
Спасибо за ваш ответ! Мне не нужно создавать уникальную строку как есть. Мне нужно получить точный алгоритм для получения строки из 16 символов, как описано. Вы можете проверить это по предоставленным ссылкам. Я использую какой-то уже существующий API, который принимает этот 16-символьный хэш, сгенерированный, как описано выше.
Если вы поместите свою контрольную строку в каждую из них, которую вы получите:
16: 92aa8ddbe039d480
32: e292561c92aa8ddbe039d4808cc51159
16-символьный результат выглядит как 32-символьный результат с удаленными первыми и последними 8 символами.
Ух ты! Спасибо. Что со мной случилось, лол? Я переутомился :)
Хотя это может быть то, что искал ОП, это не отвечает на фактически заданный вопрос. Вопрос спрашивает, как сгенерировать 16-символьный хэш MD5, на который ответ «нельзя». Взятие подстроки хэша лишает цели, потому что она может больше не быть уникальной. Нет смысла что-то хэшировать, просто возьмите 16 символов из исходной строки и назовите это хорошим.
@AbhijitSarkar Хэши по определению не уникальны. Взятие подстроки хэша — очень распространенный способ создания хэша с меньшим битовым пространством. Существует большая разница между использованием первых 16 символов строки и получением первых 16 символов хеша строки — у последнего есть свои особенности. Но вы правы: мы не можем сказать, что это «16-символьный хэш MD5». Это 32-символьный MD5 с некоторой пользовательской постобработкой.
@broot Мне неизвестно какое-либо определение хэш-кода, которое требует, чтобы он не был уникальным, поэтому я не знаю, на какое определение вы намекаете. Хотя она не обязана генерировать уникальные коды, хорошая хеш-функция предназначена для равномерного отображения во всем диапазоне, что естественным образом создает уникальные хеш-коды, насколько это возможно. Тем не менее, я думаю, что было сказано достаточно по расплывчатому вопросу ОП, поэтому я оставлю его здесь.
Невозможно представить MD5 (128 бит) в 16 печатных символах. Какую проблему ты пытаешься решить?