How to save encrypted data in cookie (using php)?

前端 未结 5 852
耶瑟儿~
耶瑟儿~ 2020-12-15 14:49

I would like to save data in cookies (user name, email address, etc...) but I don\'t the user to easily read it or modify it. I need to be able able to read the data back. H

5条回答
  •  攒了一身酷
    2020-12-15 15:23

    We use mcrypt in our projects to achieve encryption. Below is a code sample based on content found on the internet:

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

提交回复
热议问题