Я пытаюсь отправить переменную через 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 Table 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);