<?php // Полная загрузка сервисных книжек, создан 2024-01-05 12:44:55
global $wpdb2;
global $failure;
global $file_hist;
///// echo '<H2><b>Старт загрузки</b></H2><br>';
$failure=FALSE;
//подключаемся к базе
$wpdb2 = include_once 'connection.php'; ; // подключаемся к MySQL
// если не удалось подключиться, и нужно оборвать PHP с сообщением об этой ошибке
if (!empty($wpdb2->error))
{
///// echo '<H2><b>Ошибка подключения к БД, завершение.</b></H2><br>';
$failure=TRUE;
wp_die( $wpdb2->error );
}
$m_size_file=0;
$m_mtime_file=0;
$m_comment='';
/////проверка существования файлов выгрузки из 1С
////файл выгрузки сервисных книжек
$file_hist = ABSPATH.'/_1c_alfa_exchange/AA_hist.csv';
if (!file_exists($file_hist))
{
///// echo '<H2><b>Файл обмена с сервисными книжками не существует.</b></H2><br>';
$m_comment='Файл обмена с сервисными книжками не существует';
$failure=TRUE;
}
/////инициируем таблицу лога
/////если не существует файла то возврат и ничего не делаем
if ($failure){
///включает защиту от SQL инъекций и данные можно передавать как есть, например: $_GET['foo']
///// echo '<H2><b>Попытка вставить запись в лог таблицу</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file,'last_size_upload'=>$m_size_file,'comment'=>$m_comment));
wp_die();
///// echo '<H2><b>Возврат в начало.</b></H2><br>';
return $failure;
}
/////проверка лога загрузки, что бы не загружать тоже самое
$masiv_data_file=stat($file_hist); ////передаем в массив свойство файла
$m_size_file=$masiv_data_file[7]; ////получаем размер файла
$m_mtime_file=$masiv_data_file[9]; ////получаем дату модификации файла
////создаем запрос на получение последней удачной загрузки
////выбираем по штампу времени создания (редактирования) файла загрузки AA_hist.csv, $m_mtime_file
///// echo '<H2><b>Размер файла: '.$m_size_file.'</b></H2><br>';
///// echo '<H2><b>Штамп времени файла: '.$m_mtime_file.'</b></H2><br>';
///// echo '<H2><b>Формирование запроса на выборку из лога</b></H2><br>';
////препарируем запрос
$text_zaprosa=$wpdb2->prepare("SELECT * FROM `vin_logs` WHERE `last_mtime_upload` = %s", $m_mtime_file);
$results=$wpdb2->get_results($text_zaprosa);
if ($results)
{ foreach ( $results as $r)
{
////если штамп времени и размер файла совпадают, возврат
if (($r->last_mtime_upload==$m_mtime_file) && ($r->last_size_upload==$m_size_file))
{////echo '<H2><b>Возврат в начало, т.к. найдена запись в логе.</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file,'last_size_upload'=>$m_size_file,'comment'=>'Загрузка отменена, новых данных нет, т.к. найдена запись в логе.'));
wp_die();
return $failure;
}
}
}
////если данные новые, пишем в лог запись о начале загрузки
/////echo '<H2><b>Попытка вставить запись о начале загрузки в лог таблицу</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>0, 'last_size_upload'=>$m_size_file, 'comment'=>'Начало загрузки'));
////очищаем таблицу
$clear_tbl_zap=$wpdb2->prepare("TRUNCATE TABLE %s", 'vin_history');
$clear_tbl_zap_repl=str_replace("'","`",$clear_tbl_zap);
$results=$wpdb2->query($clear_tbl_zap_repl);
///// echo '<H2><b>Очистка таблицы сервисных книжек</b></H2><br>';
if (empty($results))
{
///// echo '<H2><b>Ошибка очистки таблицы книжек, завершение.</b></H2><br>';
//// если очистка не удалась, возврат
$failure=TRUE;
wp_die();
return $failure;
}
////загружаем данные
$table='vin_history'; // Имя таблицы для импорта
//$file_hist Имя CSV файла, откуда берется информация // (путь от корня web-сервера)
$delim=';'; // Разделитель полей в CSV файле
$enclosed='"'; // Кавычки для содержимого полей
$escaped='\
Ей также можно дешифровать строки после моего обфускатора, только т-с-с-с! )
давно хотел поиграться на эту тему, а тут повод 🙂
конечно все простенько
кстати можно нельзя шифровать несколькими ключами?
(2) Что значит несколькими? Типа массива из нескольких строк?… Нет, насколько я знаю…
(3) нет я имею в виду шифрование с резервным ключем, тоесть есть 2 ключа (разных), мы шифруем и расшифровать можно любым из этих двух.
например шифрование дисков так сделано, в случае утраты ключа можно расшифроврать ключем администратора
кстати EncryptedData — не штатная библиотека, (укажи в загаловке ссылку на скачивание) хотя и халявная
(4) Вот насчет этого не в курсе… Вот описание Crypto API в msdn:http://msdn.microsoft.com/en-us/library/aa380254(VS.85).aspx там есть ответ, я в англицком не силен, к сожалению! (
(6) похоже, что можно… хотя надо будет попробовать, может вечером поиграюсь
Тут можно прикольную систему сделать…
При нажатии «дешифровать» выдает «Ошибка при вызове конструктора (COMОбъект): Недопустимая строка с указанием класса»
а, ясно… качать надоть…
(5) Вроде же входит в состав Windows?…
http://www.microsoft.com/downloads/details.aspx?FamilyID=860ee43a-a843-462f-abb5-ff88ea5896f6&DisplayLang=en
ЗЫ: У кого нету можно скачать тут:
Для тех у кого по каким-то причинам (ха-ха) не получается скачать с сайта microsoft, добавил dll-ку в шапку.
Теперь:
{Форма.Форма(29)}: Ошибка при вызове метода контекста (SetSecret): Произошла исключительная ситуация: Параметр задан неверно.
Пытаюсь расшифровать код «Обфускация кода 1С»)))
(12) Дык, задавай ключ верно, что ж ты хочешь! )
Учитывая (10) думаю что обработку надо переименовать — «штатно» уже не катит…
(14) А кто бы подсказал в каких виндах этой длл-ки нету?… ) Похоже от ХР и выше?…
(15) у меня на ноуте ХР СП3 — длл-ки нет…
(16) Хм, странно… У меня XP Prof SP2 dll-ка есть.
Ладно, в любом случае, шапку переименовал и сюда библиотеку положил )
coder1cv8 красвчик!!! Всегда плюсую авансом…
Вот из-за таких, как он decode для 1С-ки не нужна будет 🙂
Добавил генерацию ключа 🙂
(0) Я тут от не фиг делать написал внешнее приложение для шифрования. На разработку, по моим понятиям, как-то не тянет, если хочешь — кину тебе на мыло, прицепишь еще файлик 😉
(тоже с генерацией ключа — GUID)
(21) Давай, кидай. Отчего же не прицепить? )
+(22) coder1cv8 собака yandex.ru
ну собствено как я и говорил, ты меня сподвиг на подвиг 🙂 сделал идентификацию изменения критических полей элементов базы по хешуhttp://infostart.ru/projects/2964/
а зная закодированный фрагмент и результат можно вычислить ключ?
(25) Ну насколько я знаю, абсолютно надежных алгоритмов шифрования нет ) Кстати, ты заметил, каждое повторное шифрование одних и тех же данных, одним и тем же ключем, дает различающийся результат.
http://www.inattack.ru/article/472.html можно почитать про Crypto API на русском.
ЗЫ: Вот здесь
(25) если это MD5 то практически нет (а там пожно юзать MD5), есть статьи по этому, в отдельных случаях подломать можно, но это исключение.
ХЕШ MD5 ломают по таблицам извесных хешей, кстати виндовые пароли именно на хешах MD5 базируються
А как насчет графического шифрования?
Это так, информация к размышлению 😉
Добавил утилитку написанную Abadonna. Плюсики ему можно поставить здесь же в комментах 🙂
(29,21) жирный плюс
+ Пригодится
У меня вот такая ошибка: {Форма.Форма(30)}: Ошибка при вызове метода контекста (Decrypt): Произошла исключительная ситуация: Встречено неверное значение тега ASN1.
Библиотеку выкачал, хотя она и была и зарегил.
(32) Ха! У меня как раз такое на 7-ке вчера было, когда восстанавливал зашифрованные пароли пользователей из базы по учету всякой хрени 😉
После шифрования заменил символы перевода строки на ‡ перед запистью в справочник (dbf), а при считывании — опять меняю ‡ на РазделительСтрок. Так взлетело
(33) В исходном тексте не встречается переводов строк (
Да ошибка вылетает как в обработке 1с, так и в твоем Encipher
Кстати а можно ли с помощью этой библиотеки шифровать 2 ключами:
один для шифрования, другой для расшифрования?
Действительно, получается что-то с зашифрованными данными не так…
(34) А перешифрование исходного текста не помогает?…
(34) Ты Encipher запусти, набери, например, слово «молоко» и зашифруй.
Сколько строчек внизу будет? ДВЕ! Думаешь я сам их там так разбил? Ни фига, там образовался при шифровании символ перевода строки
+(37) А вот при записи уже в базу (в дбф уж — точно) — происходит корявая запись в поле
(37) По моим наблюдениям перевод строки в шифрованном тексте сделан исключительно для удобства. В частности, в моем «Обфускаторе» я совсем убираю переводы строк из шифрованного текста, на расшифровку это никоим образом не влияет!
(39) Ну попробуй ради интереса записать в dbf строку «мама»+РазделительСтрок+»папа» и погляди, что запишется
(34) Перешифрование не помогает, пробовал разные алгоритмы
(38) Так я ведь в ДБФ не пишу, пробовал убрать переводы не помогает (
(41) Ну не знаю.. Именно так я вчера победил её
(40) пока совсем не понял при чем тут ДБФ?
Все происходит внутри одной обработки. Понимаю что там может быть разные переводы.
(41) Можно пример текста и ключ?…
(44)
молоко
237541f0ca3e432ba2dbac92485d1207
ДБФ тут ни причем! Это Абадонна о своем, о наболевшем наверно ))
(46) О каком наболевшем? У меня все базы на скуле, но не делать же на нем и вшивенькую базу по учету компов-паролей-логинов…
(45) У меня проблема не воспроизводится.
(47) Та я шучу! )
У меня почему то всегда эта ошибка вылезает, даже если ключом неправильным расшифровывать. Может и прав Абадонна, проблема в переводах строки, то что 1с автоматом заменяет переводы строк на свои, хотя вроде бы не должен. Сейчас проверю.
Интересный глюк…
Все извиняюсь неправильно понял то как работает обработка — думал что она при дешифровании берет нижнее поле дешифрует его и в верхнее поле засовывает, оказалось нужно копировать из нижнего в верхнее и потом только дешифровать.
(51) Ну ёлки!!! )))
(51) опанах! 😉
(52) (53) Ну я бы так сделал, чтобы тестировать было удобнее (
(54) И нашелся бы человек, который понял все правильно, и начал вставлять в верхнее окошко, и недоумевал бы почему оно не пашет :)))
(55) По любому )
А все таки не смотрели как можно шифровать 1 ключом, а расшифровывать другим. Один ключ публичный для расшифровки, другой для шифрования.
(56) Crypto API это позволяет, а объект CAPICOM, в свою очередь поддерживает практически все возможности Crypto API. Как это реализовать на практике, я лично, не задумывался… Я здесь давал уже ссылку, по-моему, на описание Crypto API на русском, почитай…
ЗЫ: Это называется асимметричный алгоритм )
Читаю, пока не разобрался (
(0) Прикольно.
по поводу ошибкиhttp://infostart.ru/profile/657/
я с третьей попытки допер.. 🙂
(60) А я то думал это очевидно! 🙂
Вопрос к спецам: есть ли шэш функции и как к ним обратиться, или плиз ссылку толковую на функции DDL.
очень полезная инфа
(63)Согласен.
Сохранил в закладки.
Ребята, подскажите такую штуку. Шифрую строку по AES-128 (по факту — XML документ) с помощью capicom.dll и получаю зашифрованную строку. Как я понял она сразу обработана через base64. Проблема в том, что не могу расшифровать в php через mcrypt (алгоритм MCRYPT_RIJNDAEL_128). Даже если просто зашифровать mcrypt эту же строку, то зашифрованный вариант получается совсем другой чем в 1С или в Encipher.exe и примерно 2 раза короче. Где могут быть грабли?
PS Немного разобрался в вопросе. CAPICOM заворачивает свой ответ в структуру ASN.1 для передачи бинарных данных и передает в структуре и алгоритм шифрования и длину ключа и сам зашифрованный поток и похоже вектор инициализации. Но все равно не могу расшифровать стандартными средствами php эти данные, уже все варианты перепробовал.
Может кто-нибудь подсказать как указать capicom что надо шифровать в режиме ECB (чтобы не использовать вектор инициализации при расшифровке) и выдавать наружу только зашифрованный кусок, а не структуру???
(1) Один умник до меня сделал обфускацию общего модуля… теперь сижу и парюсь, не могу обратно все вернуть, а очень надо, ибо нужны изменения в этом модуле. Ума не приложу как де-обфускацию сделать 🙁
С текстом понятно, а как с числами дело обстоит?