cryptKey = $config->get('cryptKey', ''); } private function getKey(): string { if ($this->key === null) { $this->key = hash('sha256', $this->cryptKey, true); } if (!$this->key) { throw new RuntimeException("Could not hash key."); } return $this->key; } private function getIv(): string { if ($this->iv === null) { if (extension_loaded('openssl')) { $this->iv = openssl_random_pseudo_bytes(16); } else { $this->iv = mcrypt_create_iv(16, MCRYPT_RAND); } } return $this->iv; } public function encrypt(string $string): string { $iv = $this->getIv(); if (extension_loaded('openssl')) { return base64_encode( openssl_encrypt($string, 'aes-256-cbc', $this->getKey(), OPENSSL_RAW_DATA , $iv) . $iv ); } $block = mcrypt_get_block_size(MCRYPT_RIJNDAEL_128, 'cbc'); $pad = $block - (strlen($string) % $block); $string .= str_repeat(chr($pad), $pad); return base64_encode( mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $this->getKey(), $string, MCRYPT_MODE_CBC, $iv) . $iv ); } public function decrypt(string $encryptedString): string { $encryptedStringDecoded = base64_decode($encryptedString); $string = substr($encryptedStringDecoded, 0, strlen($encryptedStringDecoded) - 16); $iv = substr($encryptedStringDecoded, -16); if (extension_loaded('openssl')) { return trim( openssl_decrypt($string, 'aes-256-cbc', $this->getKey(), OPENSSL_RAW_DATA, $iv) ); } $string = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $this->getKey(), $string, MCRYPT_MODE_CBC, $iv); $len = strlen($string); $pad = ord($string[$len - 1]); return substr($string, 0, strlen($string) - $pad); } public function generateKey(): string { return Util::generateSecretKey(); } }