php / laravel как преобразовать число от 1 до 2 ^ 31-1 в шестнадцатеричное число, которое содержит, например, 15 цифр

привет, я работаю с Laravel, создавая что-то вроде социального сайта,

профили пользователей — / users / id

я хотел бы скрыть идентификаторы пользователя за чем-то вроде хэша, но в шестнадцатеричной форме с одинаковой длиной

идеальным было бы, если бы его нельзя было вернуть к исходному номеру

да, я могу просто прикрепить случайное число к каждому пользователю, но каждый раз будет проверяться, не привязано ли это число к другому пользователю.
я попытался $ id_transform = hexdec (substr (md5 (md5 ($ id_transform)), 10, -10)); но это не создает уникальные строки одинаковой длины

1

Решение

Звучит так, будто вы хотите зашифровать свои идентификаторы.

Один простой способ сделать это в PHP может быть:

$id = 12345;
$key = "example key";

$encrypted_id = bin2hex(openssl_encrypt(
pack("P", $id), "BF-ECB", $key, OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING
));

print "$encrypted_id\n";
# -> 662b480853d3cc20

$decrypted_id = unpack("P", openssl_decrypt(
hex2bin($encrypted_id), "BF-ECB", $key, OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING
))[1];

print "$decrypted_id\n";
# -> 12345

Несколько очень важных замечаний:

  1. Это не особенно безопасно. Достаточно сделать последовательность значений менее очевидной.

  2. Вход $id должно быть неотрицательным целым числом. Максимальное значение 264-1, что должно быть хорошо для большинства приложений. Обратите внимание, что этот код не может обрабатывать отрицательные идентификаторы.

  3. Подтвердите свои данные. Зашифрованный идентификатор всегда будет 16 шестнадцатеричных символов; любое другое значение должно быть выброшено.

  4. $key должна быть секретной строкой длиной от 4 до 56 символов. Он должен отличаться для каждого другого типа идентифицируемого идентификатора, иначе злоумышленник может поменять местами зашифрованные идентификаторы в разных контекстах. Это не должен использоваться для любого другого шифрования в вашем приложении.

  5. Идентификатор мусора будет обычно в результате получается очень большое число в качестве расшифрованного идентификатора. Если вы знаете, что идентификаторы в вашем приложении всегда будут меньше 232, Вы можете сравнить результат с этим, чтобы определить значения, которые могут быть недействительными. Однако имейте в виду, что всегда существует небольшая вероятность того, что случайный ввод окажется действительным идентификатором.

  6. Не пытайтесь подставить в другой шифр BF-ECB (Blowfish, режим ECB), или изменить упаковку, если вы не очень уверен в том, что ты делаешь. Тот факт, что Blowfish использует необычно маленький 64-битный размер блока, имеет решающее значение для этого приложения.

2

Другие решения

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

Лучшее решение этой проблемы — не иметь его в первую очередь. Если вы сделаете свои идентификаторы пользователя случайной последовательностью символов, скажем, 10 или 15 символов, ваши проблемы исчезнут:

  • Учитывая один идентификатор, вы не получите информацию о том, как угадать другие идентификаторы
  • Столкновения чрезвычайно маловероятны и все еще могут быть проверены на относительно дешевую цену (базы данных хороши в этом!)

Обратите внимание, что это не держит секретные идентификаторы пользователей — если их общедоступный профиль /profile/foobarтогда все будут знать, что их удостоверение личности foobar, Однако безопасность вашей системы на самом деле не должна зависеть от того, чтобы держать публичный идентификатор в секрете!

Я пропустил ловушки безопасности, которые могут возникнуть при попытке свернуть какое-то шифрование параметра URL. Вы можете прочитать больше на тему (не!) шифрование параметров URL здесь: https://paragonie.com/blog/2015/09/comprehensive-guide-url-parameter-encryption-in-php

2

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector