encryption = Encryption::from($method); $ivlen = $this->encryption->iv_len(); $this->password = openssl_random_pseudo_bytes($ivlen); $this->iv = openssl_random_pseudo_bytes($ivlen); $this->data = $this->encryption->encrypt($data, $this->password, $this->iv); }catch(\Exception $e){} if(++$tries == count($methods)){ throw new \Exception("Too many failed attempts to encrypt data"); } // If for some reason the data we encrypted will not decrypt, try again until it will }while($data != (string)$this); } public function __toString(){ try{ return ''.$this->encryption->decrypt($this->data, $this->password, $this->iv); }catch(\Exception $e){ return ''; } } public function jsonSerialize(){ return "{$this}"; } public static function from(string $data){ return new self($data); } } ?>