Задать вопрос
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);
  • Вопрос задан
  • 484 просмотра
Подписаться 1 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Skillfactory
    Профессия Fullstack веб-разработчик на JavaScript и PHP
    20 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Решения вопроса 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?
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы
FoodSoul Калининград
от 180 000 до 250 000 ₽
IT-Spirit Москва
от 230 000 до 320 000 ₽
от 200 000 до 290 000 ₽