более короткий php-шифр, чем md5?


По ряду глупых причин максимальная длина данной переменной формы, которую мы отправляем на внешний сервер, составляет 12 символов.

Я хотел скрыть это значение с помощью md5, но, очевидно, с 12 символами это не сработает. Есть ли шифр с уже созданной функцией PHP, которая приведет к чему-то 12 символам или меньше?

Безопасность и целостность шифра здесь не очень важны. Мое последнее средство - просто написать функцию, которая перемещает каждую букву вверх или вниз по значению ascii на x. Таким образом, цель состоит не в том, чтобы скрыть его от эксперта по криптографии, а просто не публиковать его в виде обычного текста, чтобы нетехнический работник, просматривающий его, не знал, что это такое.

Спасибо за любой совет.

Author: Hosch250, 2010-09-21

6 answers

Это дополнение к этому ответу.

В ответе предлагается взять первые двенадцать символов из 32-символьного представления md5. Таким образом, будет потеряно 20 символов информации - это приведет к способу более возможным столкновениям.

Вы можете уменьшить потерю информации, взяв первые двенадцать символов 16-символьного представления (необработанная форма):

substr(md5($string, true), 0, 12);

Это позволит сохранить 75 % данных, в то время как использование 32 символов форма поддерживает только 37,5 % данных.

 15
Author: NikiC, 2017-05-23 12:02:37

Возможно, это поможет вам сгенерировать строку из 12 символов, которую вы можете передать в URL-адресе, не увеличивая риск столкновений

substr(base_convert(md5($string), 16,32), 0, 12);
 16
Author: Codebutcher, 2015-02-19 09:14:22

Если вам просто нужен хэш, вы все равно можете использовать первые 12 символов из хэша md5.

substr(md5($yourString), 0, 12);
 8
Author: Colin Hebert, 2013-02-21 12:08:09

Может быть, попробуйте crc32()?

 8
Author: Alex Howansky, 2017-06-27 13:35:32

Все ответы предполагают потерю части данных (более высокая вероятность столкновения), но, похоже, использование преобразования базы является лучшим подходом: например, как описано здесь http://proger.i-forge.net/Short_MD5/OMF

Вы также можете сгенерировать любую случайную строку и вставить ее в базу данных, проверив, не существует ли она уже до сохранения. Это позволит вам иметь короткие хэши и гарантировать отсутствие коллизий.

 4
Author: takeshin, 2013-10-08 17:12:08

Я должен изложить это предложение, поскольку я должен предположить, что вы контролируете сценарий, в который отправляется ваше зашифрованное значение....

Я также должен предположить, что вы можете создать множество полей формы, но они не могут иметь длину больше 12 символов каждое.

Если это так, не могли бы вы просто создать несколько полей формы и распределить строку md5 по нескольким скрытым полям?

Вы можете просто разделить строку md5 на куски по 8 и отправить каждый поместите фрагмент в скрытое поле формы, а затем соедините их вместе на другом конце.

Просто мысль...

 3
Author: Adam, 2013-10-24 13:13:36