Кодирование и сжатие URL в PHP - PullRequest
1 голос
/ 15 июля 2009

Как легко кодировать и «сжимать» URL / адрес электронной почты в строку в PHP?

Строка должна быть:

  1. трудно декодировать пользователем
  2. как можно короче (сжато)
  3. похожие URL должны отличаться после кодирования
  4. нет в базе данных
  5. легко декодировать / распаковывать с помощью PHP-скрипта

ех. вход -> выход, stackoverflow.com/1/ -> "n3uu399", stackoverflow.com/2/ -> "ojfiejfe8"

Ответы [ 4 ]

4 голосов
/ 15 июля 2009

Не очень коротко, но вы можете почтовый индекс с паролем и закодировать его с помощью base64 . Обратите внимание, что zip не слишком безопасен, когда дело доходит до паролей , но должно быть в порядке, если ваше зашифрованное значение рассчитано на короткий срок жизни.

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

2 голосов
/ 15 июля 2009

Вы можете создать свою собственную систему сжатия текста на основе общих строк: если URL начинается с 'http://www.',, то первый символ сокращенного URL-адреса -' a ', если он начинается с' https://www.',, то первый символ - «b» ... (повторите для популярных вариантов), если нет, то первая буква - «z», а URL-адрес следует в кодированном виде.

Если следующие три буквы - «abc», вторая буква - «a» и т. Д. Вам понадобится список пар букв / триплетов, которые наиболее распространены в URL-адресах, и определите наиболее популярные 26/50 и т. Д. ( в зависимости от того, какие символы вы хотите использовать), и вы должны иметь возможность проводить некоторое сжатие URL-адреса полностью в PHP (без использования базы данных). Люди смогут только изменить его, зная вашу пару букв / триплет (ваш список сопоставления) или вручную восстановив ее.

0 голосов
/ 15 июля 2009

Вот простая реализация, которая может или не может удовлетворить ваши потребности:

Input / Output:

test@test.com    cyUzQTEzJTNBJTIydGVzdCU0MHRlc3QuY29tJTIyJTNC             test@test.com  
http://test.com/ cyUzQTE2JTNBJTIyaHR0cCUzQSUyRiUyRnRlc3QuY29tJTJGJTIyJTNC http://test.com/

Код:

function encode ($in) {
    return base64_encode(rawurlencode(serialize($in)));
}

function decode ($in) {
    return unserialize(rawurldecode(base64_decode($in)));
}

пожав плечами

Вы должны быть более конкретными в отношении ваших входов и выходов и того, что вы ожидаете от каждого.

Вы также можете использовать gzcompress / gzuncompress вместо сериализации / десериализации и т. Д.

0 голосов
/ 15 июля 2009

если у вас есть доступ к базе данных, вы можете выполнить реляционный поиск, то есть будет 2 поля, одно из которых содержит исходный URL-адрес, а второе - сжатый URL-адрес. Чтобы создать второй URL, вы можете сделать что-то вроде следующего:

$str = "a b c d e f g h i j k l m n o p q r s t u v w x y z";

$str = explode(" ", $str);
$len = 5;

for($i = 0; $i < $len; $i++)
{
    $pos = rand(0, (count($str) - 1));
    $url .= $str[$pos];
}

Это просто идея, которую я придумал, код не проверен

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...