<?php
class secure_ids {
use addModules;
private $realIDs, $abstractIDs;
private $encryptSession;
public function __construct($encrypted = false, $salt = '5cfqfm8ep5a3jz01e0wr9', $method = "AES-256-CBC"){
if(session_status() != 2) session_start();
$this->importStaticModules();
if(empty($this->modules['encrypt'])){
$this->addModule('encrypt',function($string) use ($salt,$method){
$iv = substr(hash('sha256', $salt), 50, 66);
$output = openssl_encrypt($string, $method, $salt, 0, $iv);
return base64_encode($output);
});
}
if(empty($this->modules['decrypt'])){
$this->addModule('dncrypt',function($string) use ($salt,$method){
$iv = substr(hash('sha256', $salt), 50, 66);
$output = openssl_decrypt(base64_decode($string), $method, $salt, 0, $iv);
});
}
if($encrypted == true){
$this->encryptSession = true;
$secureIDs = $this->decrypt($_SESSION['_secure_ids']);
$secureIDs = json_decode($secureIDs, true);
$this->abstractIDs = $secureIDs['AbstractIDs'];
$this->realIDs = $secureIDs['RealIDs'];
} else {
$this->encryptSession = false;
$this->abstractIDs = $_SESSION['_secure_ids']['AbstractIDs'];
$this->realIDs = $_SESSION['_secure_ids']['RealIDs'];
}
}
public function __destruct(){
if($this->encryptSession == true){
$secureIDs['AbstractIDs'] = $this->abstractIDs;
$secureIDs['RealIDs'] = $this->realIDs;
$secureIDs = json_encode($secureIDs);
$_SESSION['_secure_ids'] = $this->encrypt($secureIDs);
} else {
$_SESSION['_secure_ids']['AbstractIDs'] = $this->abstractIDs;
$_SESSION['_secure_ids']['RealIDs'] = $this->realIDs;
}
}
public static function addEncryptionModule($module){
self::defineStaticModuleType('encrypt','single');
self::addStaticModule('encrypt', $module);
}
public static function addDecryptionModule($module){
self::defineStaticModuleType('decrypt','single');
self::addStaticModule('decrypt', $module);
}
private function encrypt($string){
$data = $this->runStaticModules('encrypt',$string);
return $data[0];
}
private function decrypt($string){
$data = $this->runStaticModules('decrypt',$string);
return $data[0];
}
private function checkIDStatus($id){
return (strpos($id, '-') != FALSE) ? TRUE : FALSE;
}
private function generateUniqueID(){
$nextID = base_convert(rand(60466176,2176782335),10,36);
$nextID = implode("-", str_split(str_pad($nextID, 6, '0', STR_PAD_LEFT), 2));
if(isset($this->abstractIDs[$nextID])) $nextID = $this->generateUniqueID();
return $nextID;
}
private function store($id){
$nextID = $this->generateUniqueID();
$this->realIDs[$nextID] = $id;
$this->abstractIDs[$id] = $nextID;
return $this;
}
public function displayID($id){
$isDisplay = $this->checkIDStatus($id);
if($isDisplay) return $id;
if(isset($this->abstractIDs[$id])) return $this->abstractIDs[$id];
return $this->store($id)->displayID($id);
}
public function realID($id){
$isDisplay = $this->checkIDStatus($id);
if(!$isDisplay && isset($this->abstractIDs[$id])) return $id;
if($isDisplay && isset($this->realIDs[$id])) return $this->realIDs[$id];
return $this->store($id)->realID($id);
}
}
|