2012-06-09 2 views
4

У меня есть несколько объектов (объектов), каждый из которых имеет идентификатор (уникальный) и имя.
Когда я хочу отобразить один из них, у меня есть URL-адрес, например, www.domain.com/view/key:xxx.
Ключ - это только идентификатор объекта, закодированного с помощью base64_encode, поэтому прямо из URL-адреса нет.php encode string и наоборот

То, что я пытаюсь сделать сейчас (из-за спецификаций проектов), содержит ключ, содержащий только числа и буквы (base64_encode дает результат, например eyJpZCI6IjM2In0= или eyJpZCI6IjM2In0%3D после кодирования url).

Есть ли простая альтернатива этому? Это не проблема с высокой степенью защиты - существует много способов выявления идентификатора - я просто должен иметь ключ, который содержит только буквы и цифры, которые генерируются идентификатором объекта (возможно, в сочетании с его именем), который может быть декодирован, чтобы вернуть мне идентификатор.

Все различные методы кодирования, которые я нашел, могут содержать специальные символы.
Любая помощь здесь?
Заранее спасибо

ответ

6

Этот ответ не действительно применять шифрование, но так как ваш вопрос был помечен с кодировкой, а также ...

Начиная с PHP 5 вы можете использовать bin2hex:

$s = base64_decode('eyJpZCI6IjM2In0='); 
echo bin2hex($s); 

Выход:

7b226964223a223336227d 

Для декодирования:

$s = hex2bin($data); 

Или:

$s = pack('H*', $data); 

Btw, если id чувствителен вы можете рассмотреть саботаж теплоизолирующим его в качестве альтернативы полномасштабного шифрования.


Забыл упомянуть, как вы можете сделать base64 закодированный URL данных Безопасно:

function base64_url_encode($input) 
{ 
    return strtr(base64_encode($input), '+/=', '-_,'); 
} 

function base64_url_decode($input) 
{ 
    return base64_decode(strtr($input, '-_,', '+/=')); 
} 
+0

Какую функцию вы могли бы использовать для декодирования? 'Hex2bin'? – Steve

+1

@ dynamic конечно, но вы всегда можете использовать 'pack ('H *', $ str);' как альтернатива для php <5.3 –

+0

Является ли php.net для кого-то еще? Я пытаюсь посмотреть на функцию hex2bin. и да, Джек, спасибо. – Steve

0

Существует много функций кодирования/декодирования PHP. Вы можете найти много мест here и here.

В качестве альтернативы просто избавиться от = в конце base64_encode и добавить его в код PHP для base64_decode, чтобы найти идентификатор.

+0

Не может просто избавиться от «=», он может иметь больше чем один, и тогда я не буду уметь знать, сколько «=» там, где ... – CrisDeBlonde

+0

@CrisDeBlonde: если вы сделаете свой ID фиксированной длиной, скажем, добавив идентификатор слева с ведущими нулями, тогда вы всегда будете знать, сколько «=» будет быть в конце, и вы можете удалить их. –