Резултатът от повечето процедури за криптиране (или хеширане и т.н.) е произволни двоични данни, които не могат да бъдат безопасно включени в URL, без да са кодирани.
Като бележки за яйца
, просто с помощта на urlencode()
на данните трябва да са достатъчни. Въпреки това, стандартното URL кодиране може да не е най-компактният начин за кодиране на произволни двоични данни. Base64
кодирането би било по-ефективно, но за съжаление не е напълно безопасно за URL, поради използването на +
знак.
За щастие съществува стандартизиран безопасен за URL вариант на кодирането base64, посочен в RFC 4648 като "base64url". Ето двойка функции за кодиране и декодиране на данни с помощта на това кодиране в PHP, въз основа на този отговор от "gutzmer at usa dot net" :
function base64url_encode($data) {
return rtrim(strtr(base64_encode($data), '+/', '-_'), '=');
}
function base64url_decode($data) {
return base64_decode(strtr($data, '-_', '+/'));
}
(Опростих малко функцията за декодиране, тъй като поне текущите версии на PHP очевидно не изискват =
допълващи знаци във входа към base64_decode()
.)
Пс. За сигурно генериране на произволни токени на първо място, вижте напр. този въпрос .