Я хотел бы сохранить данные в файлах 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
.