Можно ли использовать класс шифрования в коде воспламенителя для отправки защищенных данных в URL?

Я пытаюсь отправить переменную через URL. Поэтому я использую этот метод CI

$this->encrypt->encode($variable)

И я декодирую его в месте назначения. но это не возвращает правильное значение.
Пример закодированного значения:

PWI + q72keVNJtpaZgJdxfwuKtqM2VrNMGhpnknsrf / 3dadh0x + lU70h9hgSwFzTWQAEclSfoSZ2J3 / UOuLVwgA ==

Я понимаю, что здесь слишком много специальных символов, таких как +/= , И разрешать эти символы в URI будет неразумно.

Если это так, разве эта функция не может быть реализована для защиты данных, отправляемых через URL?

0

Решение

Выход из 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 заменяет оскорбительные символы на безопасные символы. В приведенном выше примере во время процесса кодирования + заменяется - а также / от _,

1

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

Я знаю, что делает шифрование не вернул правильное значение. Это из-за его специальных символов.

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);
1