Print this page

Шифрование строк по ключу для Joomla

Rate this item
(2 votes)

mcrypt_module_open - функция объявлена УСТАРЕВШЕЙ, начиная с PHP 7.1.0. Использовать эту функции крайне не рекомендуется.

Существует масса способов шифрования на PHP. Я покажу какой способ использую в своих проектах на Joomla. Допустим у нас есть какойто компонент в котором надо зашифровать ссылку или имя файла. Добавим в файл хелпера helpers/mycomp.php следующий код.

/**
	* Функции для шифрования строк по ключу
	*/
	function __encode($text, $key)
	{
		$td = mcrypt_module_open ("tripledes", '', 'cfb', '');
		$iv = mcrypt_create_iv (mcrypt_enc_get_iv_size ($td), MCRYPT_RAND);
		if (mcrypt_generic_init ($td, $key, $iv) != -1) 
			{
			$enc_text=base64_encode(mcrypt_generic ($td,$iv.$text));
			mcrypt_generic_deinit ($td);
			mcrypt_module_close ($td);
			return $enc_text;
			}       
	}
	
	function strToHex($string)
	{
		$hex='';
		for ($i=0; $i < strlen($string); $i++)
		{
			$hex .= dechex(ord($string[$i]));
		}
		return $hex;
	}
	
	function __decode($text, $key)
	{        
        $td = mcrypt_module_open ("tripledes", '', 'cfb', '');
        $iv_size = mcrypt_enc_get_iv_size ($td);
        $iv = mcrypt_create_iv (mcrypt_enc_get_iv_size ($td), MCRYPT_RAND);     
        if (mcrypt_generic_init ($td, $key, $iv) != -1) {
                $decode_text = substr(mdecrypt_generic ($td, base64_decode($text)),$iv_size);
                mcrypt_generic_deinit ($td);
                mcrypt_module_close ($td);
                return $decode_text;
        }
	}
	
	public function hexToStr($hex)
	{
		$string='';
		for ($i=0; $i < strlen($hex)-1; $i+=2)
		{
			$string .= chr(hexdec($hex[$i].$hex[$i+1]));
		}
		return $string;
	}
	/* END */

Теперь чтоб зашифровать строку в файле /views/myviews/tmpl/default.php

//Зашифровать
$val  = 'my_file.jpg';
$code = MycompSiteHelper::strToHex(MycompSiteHelper::__encode($val, 'your key'));

Допустим наша строка это некие значения передающиеся в контролер компонента mycomp для выполнения задачи скачивания файла. Например: /index.php?option=com_mycomp&task=download&id=<?php echo $code; ?>

A в модели расшифровываем ID и отдаем файл.

// Расшифровать
$val = MycompSiteHelper::__decode(MycompSiteHelper::hexToStr($code), 'your key');

 Если по какой то причине у вас не подключен файл хелпер, его можно подключить так

if(!class_exists('MycompSiteHelper')) require_once(JPATH_COMPONENT.'/helpers/mycomp.php');

 В качестве ключа можно использовать динамический ключ, например дату. Таким образом мы получим ссылку на файл которая меняется каждые сутки!

Удачи!!!