Задать вопрос
GM_pAnda
@GM_pAnda
Бездельник

Что делает этот код php?

Доброго времени суток. Интересует разбор вот этого фрагмента.
$d = array(
0 => 'test-site',
1 => 'ru'
);
$e = array('ST-214E2210-33FE865E-EC05E9A3', 'ST-204C2010-3DEFEFBE-C30E1243', 'ST-214E4000-3D4F3356-E2BCEEBB');


do {
	$b = implode('.', $d);
           
	foreach ($e as $sKey)
	{
		$a = explode('-', $sKey) + array(0, 0, 0, 0);
                
		!(Core::convert64b32(Core::convert64b32(hexdec($a[3])) ^ abs(Core::crc32($b))) ^ ~(Core::convert64b32(Core_Array::get(Core::$config->get('core_hostcms'), 'hostcms')) & abs(Core::crc32($b)) ^ Core::convert64b32(hexdec($a[2])))) && Core::$url['key'] = $sKey;
	}
	array_shift($d);
} while(count($d) > 1);



$a = explode('-', $sKey) + array(0, 0, 0, 0);
  • Вопрос задан
  • 481 просмотр
Подписаться 1 Простой Комментировать
Решения вопроса 2
sergiks
@sergiks Куратор тега PHP
♬♬
Перебирается массив серийников. Путём нехитрых битовых операций сравниваются производные от URL и от последних двух частей в серийнике. Если совпадают, в массив Core::$url дописывается ключ "key" со значением подошедшего ключа.

Разобрать длинную строку удобнее, разбив конструкцию:
$d = array('test-site', 'ru');
$e = array('ST-214E2210-33FE865E-EC05E9A3', 'ST-204C2010-3DEFEFBE-C30E1243', 'ST-214E4000-3D4F3356-E2BCEEBB');

do {
  $b = implode('.', $d); // склеили, получили "test_site.ru"
          
  foreach ($e as $sKey){ // перебираем ключи
    $a = explode('-', $sKey) + array(0, 0, 0, 0); // разбили по дефису в массив,
    // убедились, что в массиве как минимум 4 элемента (если меньше, допис. нулями)
                
    !( // логическое отрицание того, что в скобках
    	Core::convert64b32( // из 64 бит в 32
    		Core::convert64b32(
    			hexdec($a[3]) // последний фрагмент ключа перевели из 16-ричного в 10-е число
    		) 
    		^  // ксор, побитовое исключающее ИЛИ
    		abs(Core::crc32($b))  // 32-битное число, хэш из адреса сайта
    	) 
    	^  // XOR см. выше
    	~(  // побитовое отрицание
    		Core::convert64b32(
    			Core_Array::get( // тут из конфига получают значение "hostcms" 
    				Core::$config->get('core_hostcms'),
    				'hostcms'
    			)
    		) 
    		&  // побитовое И
    		abs(Core::crc32($b))
    		^
    		Core::convert64b32(
    			hexdec($a[2]) // предпоследний фрагмент из ключа, как число
    		)
    	)
    )
    &&  // только если выше в скобках получился 0, выполнится следующая строка
    Core::$url['key'] = $sKey;
  }
  array_shift($d);
} while(count($d) > 1);

$a = explode('-', $sKey) + array(0, 0, 0, 0);
Ответ написан
Комментировать
@JunDevTest
Контакты: thejundev@gmail.com | @juniordev
Зануллить движок пытаешься? Или понять алгоритм создания ключа для CMS?
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы