Я пытаюсь отправить переменную через URL. Поэтому я использую этот метод CI
$this->encrypt->encode($variable)
И я декодирую его в месте назначения. но это не возвращает правильное значение.
Пример закодированного значения:
PWI + q72keVNJtpaZgJdxfwuKtqM2VrNMGhpnknsrf / 3dadh0x + lU70h9hgSwFzTWQAEclSfoSZ2J3 / UOuLVwgA ==
Я понимаю, что здесь слишком много специальных символов, таких как +/=
, И разрешать эти символы в URI будет неразумно.
Если это так, разве эта функция не может быть реализована для защиты данных, отправляемых через URL?
Выход из encode
это закодированные в Base64 зашифрованные данные. Чтобы передать это, вы должны закодировать его в URI-безопасном формате.
На Страница PHP base64 эти функции предлагаются
$base64 = $this->encrypt->encode($variable);
$urisafe = strtr($base64, '+/', '-_');
// or
$urisafe = strtr($base64, '+/=', '-_,');
До decode
В этом случае вам придется изменить это:
$base64 = strtr($urisafe, '-_', '+/');
// or
$base64 = strtr($urisafe, '-_,', '+/=');
Первое предложение делает его совместимым с RFC 4648 Таблица 2 для безопасных кодировок URL.
strtr заменяет оскорбительные символы на безопасные символы. В приведенном выше примере во время процесса кодирования +
заменяется -
а также /
от _
,
Я знаю, что делает шифрование не вернул правильное значение. Это из-за его специальных символов.
pWI+q72keVNJtpaZgJdxfwuKtqM2VrNMGhpnknsrf/3dadh0x+lU70h9hgSwFzTWQAEclSfoSZ2J3/UOuLVwgA==
то, что отправлено в этом значении только pWI+q72keVNJtpaZgJdxfwuKtqM2VrNMGhpnknsrf
это случилось из-за /
специальные символы.
Поэтому, если мы хотим отправить это закодированное значение, мы должны сделать его безопасным. Мы можем использовать base64_encode()
после декодирования и base64_decode()
до декодирования.
Как в этом примере:
Для кодирования используйте
$id = '123';
$encrypted_id = $this->encrypt->encode($id);
$encrypted_id = base64_encode($encrypted_id);
//$url = 'www.trythis.com/site?id=' . $encrypted_id;
И декодировать
$encrypted_id = $_GET['id'];
$encrypted_id = base64_decode($encrypted_id);
$decrypted_id = $this->encrypt->decode($encrypted_id);