Виконання php-функцій із 1С 8, та створення хеш коду на підставі ключа
Нещодавно з’явилася задача формування та передачі по запиту хеш-кода з ключем методом HMAC. На жаль, 1С поки немає такого функціоналу, на сьогодні вона може тільки формувати звичайні хеш-коди, без ключа. Тому довелось шукати якісь альтернативи.
Перепробував різні варіанти які знайшов у мережі, але жоден не давав потрібний результат. Перевіряв результат на різних онлайн сервісах. Тому вирішив подивитися на задачу трохи з іншого боку, а саме виконати функцію php напряму, бо тільки так я можу отримати 100% однаковий результат виконання функції створення хеш-коду, як і будь-якої іншої функції.
Виявилось що це достатньо просто.
Сама функція php виглядає так:
1 |
string hash_hmac ( string $algo , string $data , string $key ) |
Її призначення створення хеш-коду на підставі ключа, з використанням методу HMAC.
Параметри функції:
$algo: Ім’я обраного алгоритму хешування (наприклад, “md5”, “sha256”, “haval160,4” та інші).
$data: строка яку потрібно захешувати
$key: таємний ключ який буде використовуватись для створення хеш-коду.
Теперь як її виконати із 1С та отриманий результат використати в 1С.
- Знаходимо і завантажуємо архів з файлами для роботи функцій php. Його достатньо розпакувати в окрему папку і використовувати.
- Пишемо в 1С код для формування php коду, його виконання та отримання результату. В мене вийшло так:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
//Дані яки потрібно хешувати СтрокаДляХЕШ = "{0c47a9c1-5bad-43ec-ab7d-69fd0f57ccab};accept;1503944945"; //Ключ за допомогою якого будемо шифрувати дані ТаємнийКлюч = "5fslk3a409r1ef2sn543tx56fdfhj4at*4F8sN4JRET"; //Вказуємо шлях де розпакували файли php ШляхДоPHP = "c:\php\php.exe"; //Тимчасові файли длф формування скрипта та запису результату ФайлPHP = ПолучитьИмяВременногоФайла("php"); ФайлТХТ = ПолучитьИмяВременногоФайла("txt"); //Формуємо текст скрипта php який нам треба виконати //Результат запишемо в текстовий файл ТекстФайлPHP = Новый ТекстовыйДокумент; ТекстФайлPHP.УстановитьТекст("<?php |$signature = hash_hmac('md5','" + СтрокаДляХЕШ + "', '" + ТаємнийКлюч + "'); |file_put_contents('" + ФайлТХТ + "' ,$signature ) |?>"); ТекстФайлPHP.Записать(ФайлPHP); //Запускаємо на виконання цей скрипт Скрипт = Новый COMОбъект("WScript.Shell"); Скрипт.Run("" + ПутьКPHP + " " + ИмяФайлаPHP,0,1); //Читаємо результат із текстового файлу ТекстФайла = Новый ТекстовыйДокумент; ТекстФайла.Прочитать(ИмяФайлТХТ) ; signature = СокрЛП(ТекстФайла.ПолучитьТекст()); //Видаляємо тимчасові файли УдалитьФайлы(ФайлPHP); УдалитьФайлы(ФайлТХТ); |
Таким чином можна виконувати буль-який код на PHP.