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

0

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

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

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

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

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

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

Теги:
encryption
base64
codeigniter
url-encoding

2 ответа

1
Лучший ответ

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

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);
  • 0
    Выполнение второго шага кодирования Base64 удалит некоторые возможные символы, что делает его безопасным для URL, но это также раздувает ваши данные еще на 30%, что вам нужно отправлять и получать больше данных, и это займет больше времени.
  • 0
    @ArtjomB. да, сейчас я думаю, что это единственное решение для отправки зашифрованной переменной через URL. у тебя есть лучшая душа?
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню