Intereting Posts
Codeigniter – Завершение сеанса и функция «запомнить меня» Можно ли выполнить этот метод preg_replace_callback в xPath или XQuery? Как найти тег объекта с параметром и вставить тег внутри HTML с помощью простого html DOM php Как отладить IE11 APPCACHE PHP – Получение текущего URL-адреса Публикация сообщения на стене пользователя приложением facebook Создание экземпляра из данных mySQL с использованием php Динамическое создание строк и столбцов с помощью PHP и HTML Разделить массив на основе данных массива Форма HTML просто не отправит некоторые POST-переменные в скрипт PHP TINYINT vs ENUM (0, 1) для булевых значений в MySQL «Класс XXX не является допустимым сущностью или отображенным суперклассом» после перемещения класса в файловой системе Проблема с открытием файла PHP? Хотите добавить столбец, но класс миграции не найден даже Он существует Сортировка элементов совпадающих тегов, имеющих вес в MySQL

Как сохранить зашифрованные данные в cookie (используя php)?

Я хотел бы сохранить данные в файлах cookie (имя пользователя, адрес электронной почты и т. Д.), Но я не могу его легко прочитать или изменить. Мне нужно уметь читать данные назад. Как я могу сделать это с помощью php 5.2+?

Он будет использоваться для функции приветствия back bob. Это не замена для сохранения или хранения сеанса.

Мы используем mcrypt в наших проектах для обеспечения шифрования. Ниже приведен пример кода, основанный на содержимом, найденном в Интернете:

<?php class MyProjCrypt { private $td; private $iv; private $ks; private $salt; private $encStr; private $decStr; /** * The constructor initializes the cryptography library * @param $salt string The encryption key * @return void */ function __construct($salt) { $this->td = mcrypt_module_open('rijndael-256', '', 'ofb', ''); // algorithm $this->ks = mcrypt_enc_get_key_size($this->td); // key size needed for the algorithm $this->salt = substr(md5($salt), 0, $this->ks); } /** * Generates a hex string of $src * @param $src string String to be encrypted * @return void */ function encrypt($src) { srand(( double) microtime() * 1000000); //for sake of MCRYPT_RAND $this->iv = mcrypt_create_iv($this->ks, MCRYPT_RAND); mcrypt_generic_init($this->td, $this->salt, $this->iv); $tmpStr = mcrypt_generic($this->td, $src); mcrypt_generic_deinit($this->td); mcrypt_module_close($this->td); //convert the encrypted binary string to hex //$this->iv is needed to decrypt the string later. It has a fixed length and can easily //be seperated out from the encrypted String $this->encStr = bin2hex($this->iv.$tmpStr); } /** * Decrypts a hex string * @param $src string String to be decrypted * @return void */ function decrypt($src) { //convert the hex string to binary $corrected = preg_replace("[^0-9a-fA-F]", "", $src); $binenc = pack("H".strlen($corrected), $corrected); //retrieve the iv from the encrypted string $this->iv = substr($binenc, 0, $this->ks); //retrieve the encrypted string alone(minus iv) $binstr = substr($binenc, $this->ks); /* Initialize encryption module for decryption */ mcrypt_generic_init($this->td, $this->salt, $this->iv); /* Decrypt encrypted string */ $decrypted = mdecrypt_generic($this->td, $binstr); /* Terminate decryption handle and close module */ mcrypt_generic_deinit($this->td); mcrypt_module_close($this->td); $this->decStr = trim($decrypted); } } 

Я предлагаю вам не только шифровать, но и подписывать данные. Если вы не подписываете данные, вы не сможете достоверно сообщить, изменил ли пользователь данные. Кроме того, чтобы избежать повтора, вы можете захотеть добавить в данные некоторую информацию периода времени / срока действия.

Если вы не хотите, чтобы ваши пользователи читали его, не помещайте его в файл cookie; Вместо этого используйте Session с файлом cookie, который остается на более длительное время. Таким образом, данные остаются на сервере, а не на компьютере пользователя.

См. Эту статью о постоянных сеансах

Пример шифрования см. В разделе «симметричное шифрование» в http://www.osix.net/modules/article/?id=606 .

Чтобы предотвратить несанкционированное изменение, используйте HMAC: http://php.net/hash-hmac и о hmac в целом: http://en.wikipedia.org/wiki/HMAC , http://en.wikipedia.org/ вики / Message_authentication_code

И если вам это не нужно, не храните конфиденциальные данные в cookie, даже зашифрованные. Вы можете больше узнать о «передаче данных».

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

http://php.net/mcrypt