gifts2017

Внешняя компонента для работы со строками

Опубликовал Аркадий Кучер (Abadonna) в раздел Программирование - Внешние компоненты

ВК по технологии Native для работы со строками: хеши по различным алгоритмам, крутое шифрование, вычисление релевантности (схожести) строк. Событие переключения подсистем.

ВК является выделенной частью полной версии MiracleNative. (http://infostart.ru/public/125913/)

Изюминки:

Получение хешей, в том числе и по актуальному для 1С (в части последнего интереса к брутфорсу паролей) алгоритму SHA1

   

Шифрование/Дешифрование строк с ключом, когда результат шифрования одной и той же строки с одним и тем же ключом всегда получается разный, а дешифровка однозначной. Исключительно затруднен "взлом"

   

Функция неявного сравнения строк (вычисление релевантности /схожести/). Может пригодиться для чистки справочников от "почти дублей", загрузки прайсов и т.д.

Примеры вычисления релевантности пар строк:

"майка мужская", "мужск. майка" =78
"дизельгенератор", "генератор дизельный" =82
"тонер для принтера", "тонер принт." =73

Архив включает: собственно саму ВК StringsNative.dll, тестовую обработку (все методы ВК) DLLTest.epf (8.2), файл описания методов StringsNative_dll_ReadMe.txt 

Версия 1.1.1.2:

1. Исправлена досадная ошибка во вспомогательной функции СтрокуБайтовВСтрокуСимволов

2. Добавлен метод  СформироватьГУИД - возвращает стандартную строку GUID Windows

Учитывая, что Майкрософт грозился, что их ГУИД может повториться только раз в тысячу лет, можно использовать
как супер-случайную строку.

Версия 1.1.1.3 (второй файл)

В свете http://infostart.ru/public/178957/ от щедрот MiracleNative ;)

Метод ПодключитьКонтрольНавигационныхСсылок() // без параметров.

Перехват события WM_PARENTNOTIFY, генерирует внешнее событие "WM_NAVIGATE_REF_CLICK"

Возвращает: "УСПЕШНО", "УЖЕ ВКЛЮЧЕН" (при повторной попытке при включенном), "НЕ УПРАВЛЯМОЕ ПРИЛОЖЕНИЕ" (работает только в тонком клиенте управляемого приложения).

Пример обработки события:

Процедура ОбработкаВнешнегоСобытия(Источник, Событие, Данные)
   Если Событие="WM_NAVIGATE_REF_CLICK" Тогда
      НавигационнаяСсылка = АктивноеОкно().ПолучитьНавигационнуюСсылку();
      НавигационнаяСсылка=СтрЗаменить(НавигационнаяСсылка,"e1cib/navigationpoint/","");
      Сообщить("НавигационнаяСсылка: "+НавигационнаяСсылка);
   КонецЕсли;
КонецПроцедуры

Метод ОтключитьКонтрольНавигационныхСсылок() - соответственно отключает при необходимости ранее включенный

Версия 1.1.1.5. С учетом комментарие. И ВК, и обработка. Доработки - комментах

Скачать файлы

Наименование Файл Версия Размер
Архив 190
.zip 237,46Kb
28.09.16
190
.zip 237,46Kb Бесплатно
Версия 1.1.1.3 117
.zip 237,19Kb
28.09.16
117
.zip 237,19Kb Бесплатно

См. также

Подписаться Добавить вознаграждение
Комментарии
1. Аркадий Кучер (Abadonna) 20.03.13 09:16
Полный текст readme:
Поключение ВК:
ПодключитьВнешнююКомпоненту(ПолноеИмяВК,"StringsNative",AddInType.Native);
Создание объекта:
Строки = Новый("AddIn.StringsNative.V8Strings");
Далее к методам созданного объекта обращаемся как обычно, через точку.
Например:
HASH_SHA1=1;
Стр=Строки.ПолучитьХешСтроки(СокрЛП(ИсходнаяСтрока),HASH_SHA1);


Методы:

ПолучитьХешСтроки(ИсходнаяСтрок:строка,Алгоритм:Число): строка
Возвращает хеш-строку переданной строки по выбранному алгоритму.
Алогритмы:
1 - SHA1
2 - SHA256
3 - MD5
4 - CRC32
5- HAVAL128

ПолучитьСтрокуBase64(ИсходнаяСтрок:строка): строка
Получает строку Base64 из переданной.
Примечание: строка символов, а не hex-последовательность байтов

ПолучитьСтрокуИзBase64(ИсходнаяСтрок:строка): строка
Получает строку из Base64-строки (символов)

СтрокуСимволовВСтрокуБайтов(ИсходнаяСтрок:строка): строка
Получает строку hex-последовательности байтов переданной символьной строки
Примечания:
1. В совокупности с ПолучитьСтрокуИзBase64 является аналогом оператора 1С: Base64Значение(ИсходнаяСтрока)
2. Именно так в 1С хранится хеш-пароля


СтрокуБайтовВСтрокуСимволов(ИсходнаяСтрок:строка): строка
Противоположна предыдущей



ШифроватьСтроку(ИсходнаяСтрок:строка.Ключ:строка): строка
Получает шифрованную строку из исходной.
Ключ - строка ключа, необязательный, если не указан - внутренний ключ ВК
Примечания:
1. Используются внутренние методы шифрования Windows
2. Изюминка состоит в том, что при шифровании с одним и тем же ключом, результат получается разный. А дешифруется однозначно


ДешифроватьСтроку(ИсходнаяСтрок:строка.Ключ:строка): строка
Противоположна предыдущей

РелевантностьСтрок(Строка1:строка,Строка2:строка,Направление:Булево): число
Функция неявного сравнения строк. Вычисление релевантности (схожести) строк.
Релевантность до 100 (полностью идентичны)
Направление - необязательный, по умолчанию Истина
При Направление=Истина строкой эталоном считается Строка2, иначе Строка1
Например, релевантность пар:
майка мужская -> мужск. майка =78
дизельгенератор -> генератор дизельный =82
тонер для принтера -> тонер принт. =73

Тестировалось на: WindowsXP, Windows7, Windows Server ® 2008 Standard Service Pack 2 (32 и 64)
2. Епрст (Ёпрст) 20.03.13 09:57
3. Роман С (Dach) 20.03.13 11:56
Релевантность строк - как работает на больших объемах данных? Насколько быстро? И как сравнивает - посимвольно или "самообучаясь" (запоминая слова из строк и ища похожие) ?
4. Аркадий Кучер (Abadonna) 20.03.13 12:00
(3) Dach, для больших объемов (длин строк) не предназначена, да и не проверял. Самообучаемости нет, просто всегда выполняется алгоритм.
5. Сергей Ожерельев (Поручик) 20.03.13 12:11
(0) Релевантность по какому алгоритму вычисляется?
6. Аркадий Кучер (Abadonna) 20.03.13 12:24
(5) Поручик, если честно - ХЗ ;) нашел готовый модуль, подцепил, потестил, вроде похоже на правду.
7. andrewks 20.03.13 12:42
шифрование - по какому алгоритму?
8. andrewks 20.03.13 12:44
Шифрование/Дешифрование строк с закрытым ключом - не понял, а ключ один внутрях, или как?
9. Аркадий Кучер (Abadonna) 20.03.13 13:24
(7)
шифрование - по какому алгоритму?

Тебе скажи, ты ж расшифровывать начнешь :))) могу только сказать, что используется библиотека винды advapi32.dll, функции CryptEncrypt, CryptDecrypt и т.п...
не понял, а ключ один внутрях, или как?

А ридми почитать?;)
Ключ - строка ключа, необязательный, если не указан - внутренний ключ ВК

Закрытый ключ метод
10. andrewks 20.03.13 16:42
(9) Abadonna,
Закрытый ключ метод

я знаю, что такое закрытый ключ ;-)
потому и возник вопрос. т.е. получается не закрытый ключ (который подразумевает также наличие пары - открытого ключа), а просто ключ
13. andrewks 20.03.13 16:53
14. Аркадий Кучер (Abadonna) 20.03.13 17:05
(13)да фиг с ней, с терминологией ;)
вот что там юзается:
function CryptEncrypt(Key: HCRYPTKEY; Hash: HCRYPTHASH; Final: LongBool; Flags:
LongWord; Data: PBYTE; Len: PLongWord; BufLen: LongWord): LongBool; stdcall;
external ADVAPI32 name 'CryptEncrypt';
и т.д. и т.п.
а инциализация по алгоритму RC2 (а можно было и по RC4)
15. Алексей 1 (AlX0id) 21.03.13 10:19
(1) Abadonna,
Спасибо )
Опробую на досуге Ваш RC2 связать с php-шным :)
16. Виталий (flash2k) 21.03.13 12:41
интересная вещь.
опробую релевантность на справочнике номенклатуры
17. Аркадий Кучер (Abadonna) 21.03.13 15:20
(16) flash2k, потом результат, плиз, в студию. По скорострельности, например и т.п. А то я обычно свой кокаин не нюхаю :)))
18. John Smith (PiccaHut001) 21.03.13 16:48
ещё одна строковая библиотека. На 1С.
19. Валерий Агеев (awa) 21.03.13 18:48
Abadonna, что такое "строка hex-последовательности байтов"? Что получится при вызове метода СтрокуСимволовВСтрокуБайтов("АбВ")?
20. Аркадий Кучер (Abadonna) 22.03.13 06:38
(19) awa, СтрокуСимволовВСтрокуБайтов("АбВ")="C0E1C2"
Код символа "А"=192=$C0, Код "б"=225=$E1 и т.д. В общем, набор hex-представлений байт по набору символов.
RESULT:='';
  for i:=1 to Length(s) do begin
     RESULT:=RESULT+IntToHex(Ord(s[i]),2);
  end;
...Показать Скрыть
21. andrewks 22.03.13 07:18
(20) Abadonna, т.е. строка сначала конвертируется в ANSI?
22. Михаил Лыков (Miha.L) 24.03.13 01:44
23. Олег Сорокин (Oleg_nsk) 25.03.13 13:33
"внутренний ключ ВК" это какая-то константа из dll или на лету формируемая строка привязанная к железу?
24. Аркадий Кучер (Abadonna) 25.03.13 15:35
(23) Oleg_nsk,
Скажем так - длиннющий параметр по умолчанию,передаваемый в функцию. Можно сказать, что и константа.
25. Сергей Марченко (MarSeN) 25.03.13 15:42
(0) Abadonna
Можно получить исходный код реализующий "Перехват события WM_PARENTNOTIFY". Я хотел бы сделать так, чтобы меню из главного окна (статья "v8.2 Управляемые формы: добавляем произвольное пользовательское меню в основное меню 1С без модификации конфигурации" http://infostart.ru/public/179374/ ) перемещалось на активное окно.
26. Аркадий Кучер (Abadonna) 25.03.13 15:56
27. Сергей Марченко (MarSeN) 25.03.13 15:59
28. Сергей Марченко (MarSeN) 25.03.13 18:40
(26) Abadonna
Перехватил WM_PARENTNOTIFY, но в но в LOWORD(ParamW) нету WM_CREATE. Там вообще ничего нету.
Весь инет прошерстил (даже аналогичный код перехвата WM_PARENTNOTIFY нашел) - вроде делаю все правильно, а результат нулевой ((
29. Аркадий Кучер (Abadonna) 25.03.13 19:10
(28) MarSeN, точно не помню, но в режиме декстопа его может и не быть.
Юзай SPYXX.EXE (от мелкософта), смотри сообщения окна им...
WM_CREATE у меня появляется в моей базе, где режим подсистем вообще отключен, и по кнопке рождается свободное
SDI - окно. Зато фиг потом проходит WM_CLOSE или WM_DESTROY
Я ж в своей базе полным извратом занялся. SDI-окно после рождения приобретает родителя в виде главного и сворачивется в псевдо-трей главного. А при закрытии - кнопка из псевдо-трея уходит.
Вот так оно смотрится
Прикрепленные файлы:
30. Аркадий Кучер (Abadonna) 25.03.13 19:11
+/29/ И не надо мне там вообще никакого меню. Кнопки под каждого юзверя прям на ходу перестраиваются
31. Аркадий Кучер (Abadonna) 25.03.13 19:21
(28) MarSeN,
но в LOWORD(ParamW)

Честное слово, аж кайф поймал :))) Свои ;)
32. Сергей Марченко (MarSeN) 25.03.13 20:08
(31) Abadonna
)))
А ты не мог бы глянуть в исходники "Внешняя компонента для работы со строками"? там как раз то что мне надо "Метод ПодключитьКонтрольНавигационныхСсылок() // без параметров."
33. smaharbA (smaharbA) 25.03.13 23:55
34. Аркадий Кучер (Abadonna) 26.03.13 03:24
(32) MarSeN, а там и смотреть нечего, там всего одно условие на сабклассинге
if TheMessage = WM_PARENTNOTIFY{528} then begin // клик на навигационной ссылке
    I_V8.ExternalEvent('STRINGS_NATIVE', 'WM_NAVIGATE_REF_CLICK', '');
  end;


(33) Словечки подбирай
35. Сергей Марченко (MarSeN) 26.03.13 09:52
(34) Abadonna
Понятно. Я просто уже в условии if TheMessage = WM_PARENTNOTIFY пытался LOWORD(ParamW) сравнить с WM_CREATE и тогда послать событие в 1С )
Там еще есть разница когда режим работы открытия окон в закладках и отдельными окнами. Лан, разберусь
Еще раз спасибо за помощь, Abadonna. Не буду "засорять эфир" )
36. Аркадий Кучер (Abadonna) 26.03.13 10:00
(35) MarSeN,
Там еще есть разница когда режим работы открытия окон в закладках и отдельными окнами

Вот когда отдельными, там, скорее всего, и будет LOWORD(ParamW)=WM_CREATE
37. Аркадий Кучер (Abadonna) 28.03.13 21:48
(21) andrewks, извини, сразу не ответил...
Тип данных String используется, чтобы хранить последовательность символов (предложения).

По умолчанию String обрабатывается как AnsiString. Он может быть обработан как ShortString, если директива компилятора $LongStrings установлена в Off (по умолчанию установлена в On).

Поэтому ничего там специально не преобразуется, строка в Дельфи - массив AnsiChar
38. andrewks 29.03.13 08:08
(37) Abadonna, фишка в том, что в 1С строка - unicode UTF-16
39. Аркадий Кучер (Abadonna) 29.03.13 08:22
(38) andrewks, никаких фишек. Спокойно параметр s := V8AsWString(@Params[1]) принимает, и безо всяких делает
Я даже не заморачивался. В v8napi.pas все уже предусмотрено, спасибо http://infostart.ru/public/81644/
Ты, поди, на Си фигаришь? Терпеть его не могу ;)
40. andrewks 29.03.13 08:54
(39) Abadonna, я на Lazarus фигарю ;-)

на Си тоже могу, но редко.

так я и не понял, какой тип имеет s?
41. Аркадий Кучер (Abadonna) 29.03.13 09:19
(40) andrewks, Lazarus ка раз вчера пытал. Все зашибись, но размер экзюка... офигеть. Вроде и отладочну информацию исключил...
вот тебе полный код:
function TV8Files.StringToHexByteString(RetValue: PV8Variant; Params:
  PV8ParamArray;
  const ParamCount: integer): boolean;
var i: integer;
var s, sout: string;
begin
  s := V8AsWString(@Params[1]);
  sout := '';
  for i := 1 to Length(s) do begin
    sout := sout + IntToHex(Ord(s[i]), 2);
  end;
  V8SetWString(RetValue, sout);
  RESULT := true;
end;

...Показать Скрыть
42. andrewks 29.03.13 09:23
(41) Abadonna,
Все зашибись, но размер экзюка... офигеть. Вроде и отладочну информацию исключил...


видимо, не до конца. отладочную инфу лучше в отдельный файл переключить
Прикрепленные файлы:
43. andrewks 29.03.13 09:25
(41) Abadonna, вот здесь
s := V8AsWString(@Params[1]);

идёт неявное преобразование типа. так делать не желательно
44. Аркадий Кучер (Abadonna) 29.03.13 09:27
(43) andrewks, знаешь почему у меня достаточно уникальные разработки? Меня никто не учил, что "так нельзя", я делаю - оказывается можно :))) Вечный двигатель стопудово изобретет человек, который не знает, что его изобрести нельзя ;)
45. andrewks 29.03.13 09:34
(44) Abadonna, и тем не менее... можно получить необратимое преобразование с потерей (если в строке есть символы, не укладывающиеся в ANSI)
46. Аркадий Кучер (Abadonna) 29.03.13 09:36
+/44/ V8AsWString(@Params[1])- везде стоит в MiracleNative, и везде нормально в строку воспринимается.
47. Валерий Агеев (awa) 29.03.13 11:02
(46) Пока речь идет просто о строках - можно не замечать, что внутри компоненты идет преобразование строк в кодировку ANSI и обратно при возврате строк из компоненты. Подавляющее большинство строк, встречающихся в 1С, содержат только те символы, которые входят в кодировку ANSI - до тех пор, пока на компе есть поддержка русского языка и основная кодовая страница win1251. Но на многих серверах это уже не так. Но я не об этом.
Итак, пока речь идет просто о строках - можно особенно не морочиться с кодировками.
Но вот как только речь заходит про такие функции, как ПолучитьХешСтроки() или СтрокуБайтовВСтрокуСимволов() - то здесь мы уже имеем дело не просто со строкой, а с ее представлением в памяти, т.е. непосредственно с кодировкой! Результат этих функций напрямую зависит от кодировки строки. В этих функциях, имхо, обязательно должен быть еще один параметр, указывающий кодировку строки. Как минимум нужна поддержка кодировок ANSI, UTF8, UTF16LE и UTF16BE.
Ну либо в документации четко указать, что кодировка строк - ANSI.
Просто я подозреваю (не проверял, это лишь умозаключение!), что если установлю пароль "ДамТебеГорошка" в 1С, и получу хэш пароля через свойство СохраняемоеЗначениеПароля пользователя, он не совпадет с хэшем, посчитанным с помощью компоненты.
48. Аркадий Кучер (Abadonna) 29.03.13 11:06
(47) awa, проверь ;)
вообще, меня не сильно волнуют другие кодировки. Все должны говорить или на русском,или на английском :)))
49. andrewks 29.03.13 12:31
(47) awa, стопудово не совпадёт, т.к. хэш 1с вычислит либо с utf-16, либо с utf-8, и тоно не с ansi. других строк в базе 1с нет
50. andrewks 29.03.13 12:33
думаю, даже с иероглифами можно не заморачиваться, а попробовать передать в компоненту неразрывный пробел, а потом получить его назад. думаю, придёт уже не он
51. Валерий Агеев (awa) 29.03.13 14:14
(48) Пришлось проверить. Все как я и говорил. Не совпало.
1С считает хеш из последовательности байт, которые образует заданная строка в кодировке UTF8. Соответственно, пока в строке используются только символы из первой половины кодовой страницы ANSI (с кодом меньше 128), например английские буквы и цифры, то все совпадает, так как представление этих символов в кодировках ANSI и UTF8 совпадает. Но для русских букв представление в кодировках ANSI и UTF8 уже разное, и, как следствие, хэши, посчитанные 1С и компонентой разные. Для строки "ДамТебеГорошка" 1С считает такой хэш:
9c7a3ea5365f570b1cb5feea20cda9952b9111a8
Компонента для этой же строки считает уже совсем другой хэш
5643d69c000601f786174e28b8747b7177ae3ecd
В общем, Abadonna, очень зря тебя не волнуют другие кодировки. В текущем виде компонента не способна помочь в деле работы с паролями 1С.
Фактически, в компоненте нужна функция, которая считает хэш от строки в кодировке UTF8, и преобразующая двоичный хэш сразу в строку по алгоритму base64. Тогда это получится именно то, что хранится в 1С как хэш пароля.
(49) andrewks, я и не сомневался)) Логика - вещь железная))
52. Аркадий Кучер (Abadonna) 29.03.13 19:18
(51) awa, спасибо. подправим. Всех дело-то: AnsiToUtf8(СтрокаAnsi)
53. andrewks 29.03.13 20:28
(52) Abadonna, эмм... не хотелось бы огорчать... но лучше сразу получать unicode, юезо всяких unicode->ansi->unicode
54. Аркадий Кучер (Abadonna) 29.03.13 20:32
(53) andrewks, проверю. не пойдет, сделаем по другому.
55. andrewks 29.03.13 20:33
56. Alexey K (kanalex) 30.03.13 21:12
на строне х64 сервера не работает:(
Пишет:

Тип не определен (AddIn.StringsNative.V8Strings)
	Строки = Новый("AddIn.StringsNative.V8Strings");
57. Василий Мазурок (mvgfirst) 03.04.13 23:03
(56) kanalex,

на строне х64 сервера не работает:(
Пишет:

Тип не определен (AddIn.StringsNative.V8Strings)
Строки = Новый("AddIn.StringsNative.V8Strings");


Поддерживаю!! Сам бьюсь понять не могу чо за беда!

И походу я "приплыл" - все тестировал работая с клиентом и что интересно, если на клиенте подключать на том же самом сервере (через РДП) то все работает. А вот добавил создание этой функции в регламентное задание - и на тебе!!! Получил "Тип не определен"

Кто как решил?!
58. andrewks 03.04.13 23:05
(57) mvgfirst, длях64 сервера нужна скомпилированная х64 версия библиотеки
59. Василий Мазурок (mvgfirst) 03.04.13 23:07
Мне-то очень удобна была компонента.
Одновременно для работы нужно и MD5 и SHA1 (банк для обмена требует что бы 1000 раз хеш от хеша получить)

И тут вроде все в одном флаконе - но на сервере флакон не открывается
60. Василий Мазурок (mvgfirst) 03.04.13 23:09
(58) andrewks,

(57) mvgfirst, длях64 сервера нужна скомпилированная х64 версия библиотеки


Полностью с Вами согласен, а где ее взять? Или она идет в поставке а я просто незаметил?
Ща перекачаю проверю
61. andrewks 03.04.13 23:11
(60) mvgfirst,
а где ее взять?

думаю, надо попросить автора собрать х64 версию (если её в архиве нет)
62. Василий Мазурок (mvgfirst) 03.04.13 23:14
Автор - прошу! Скомпилируй пожалуйста в x64 - очень надо!
63. Василий Мазурок (mvgfirst) 03.04.13 23:22
До меня дошло - почему при загрузке компоненты в клиенте - все работало.

Хотя я и запускал "Толстого клиента" на х64 сервере - он то запускался все-равно как x86 приложение (ибо их нет 64-разрядных)
А когда загнал в регламентное задание - компоненту уже захотел подключить сервер - и вот ему-то (чистому "арийцу") надо именно 64-х разрядную компоненту.

Эх блин, что бы выловить этот глюк - я потратил 5 часов (не хотел заморачиваться с отладочным режимом сервера - и все через логфайлы делал)

Очень надеюсь - завтра я проснусь, а 64-разрядная компонента уже скомпилена и готова к скачиванию!
64. andrewks 03.04.13 23:24
(63) mvgfirst, это не глюк, это, как-бы, так задумано :)
клиенты под вин - только х32
а сервер - есть х32, есть х64
65. Василий Мазурок (mvgfirst) 04.04.13 11:01
Автор! Отзовись пожалуйста, нужно понимание - ждать версию x64 или нет?
66. Василий Мазурок (mvgfirst) 04.04.13 11:04
И в догонку, если вдруг грядут изменения, и возможно расширение функциональности компоненты - может добавить функцию "Пауза(КоличествоМиллисекунд)"
Нужно это для того что бы организовывать паузу между вызовами команд сервера (такие требования предъявил Банк - ждать минуту между вызовами его API)
67. Аркадий Кучер (Abadonna) 07.04.13 17:28
(51) awa, Лови, именно твой горох там. Даже слопала пароль, который в белой горчяке только присниться может. Вот аж какой: ступаявлестамжуткоЫЫЫЫ. Уж уж буквы с самым большим кодом, всякие "я" и "Ы". За Япону мать гарантий не даю.
Прикрепленные файлы:
68. Аркадий Кучер (Abadonna) 07.04.13 17:33
Фотография* (необходима для заполнения профиля)Фотография* (необходима для заполнения профиля)Фотография* (необходима для заполнения профиля)

Доржи, ты бренды не порти!
69. Аркадий Кучер (Abadonna) 07.04.13 17:51
(66) mvgfirst, добавив метод Задержка, обычный виндовый sleep(мс). Один параметр, если опущен по умолчанию 25 мс.
Что касается скомпилировать на х64, то могу попробовать только лазарусом, но там неизвестно, что вылезет...
Я на нем пока только "Пошел ты, мир!" написал.
70. Василий Мазурок (mvgfirst) 07.04.13 17:57
Очень нужна 64-х разрядная, или скажем так "запускающаяся в регламентном задании на 64-х разрядном сервере" )))

Я на мисте поднял тему поиска альтернтивных способов расчета MD5 и SHA1. Там предложили яваскрипты. И все бы хорошо... да вот выяснилось что в 8.2 метод base64Строка возвращает совсем иное значение чем метод твоей компоненты: ПолучитьСтрокуBase64

И что самое печальное банк "хавает" именно твой вариант. Понять немогу почему....
71. Василий Мазурок (mvgfirst) 07.04.13 17:58
И кстати вопрос, а если запустить твою компоненту на сервере Линукс, работать будет?
Не то что бы мне это было нужно - но все-таки.
72. Аркадий Кучер (Abadonna) 07.04.13 18:13
Под эмулятором будет. Я ж не бог, а тупой одноэснег (сам себя всегда так зову) и просто видновый прогер на Д7
73. Василий Мазурок (mvgfirst) 07.04.13 19:27
74. andrewks 07.04.13 19:50
(71) mvgfirst, если имеется в виду сервер 1с под linux, то - нет.
и эмуляторы тут ни при чём. ну, а запуск вин-сервера 1с под вайном - это чистой воды извращение (при наличии "родного", линуксового)
75. Аркадий Кучер (Abadonna) 07.04.13 21:25
(73) mvgfirst, можешь считать, что уже никогда. У меня даже ОС пол рукой нет x64, чтобы потом туда х64 IDE пихать.
Очень надеюсь - завтра я проснусь, а 64-разрядная компонента уже скомпилена и готова к скачиванию!

Мечты... мечты...
76. Василий Мазурок (mvgfirst) 07.04.13 21:33
Я гдето так и предполагал.... поэтому решил вопросы (надеюсь что решил) с помощью javascript
Три скрипта засунул в одну обработку и ее вызываю на сервере. Думаю - то что нужно. Хотя конечно по скорости не самый идеальный случай.

Что же, завтра рабочий день - в боевых условиях и проверим....


В любом случае спасибо за внимание и попытки помочь.
77. Аркадий Кучер (Abadonna) 07.04.13 22:42
(76) mvgfirst, попорчена современная генерация снеговиковыми регл. заданиями. А вопрос-то решается просто:
батник на запуск от имени Автопилота, там более теперь даже параметр появился /execute, батник по ВИНДОВСКОМУ планировщику заданий - и твори, что хошь! У меня нигде регламенты не используются! А как на 7.7. делали?! Только так! Автопилота сделай терминальным - и все твоим скрипты на фиг не нужны
78. Василий Мазурок (mvgfirst) 08.04.13 13:40
А может все-таки подумать и скомпилить?

MSScriptControl - тоже неработает в x64

Это прям как проклятие какое-то
79. Василий Мазурок (mvgfirst) 08.04.13 16:54
В общем-то с горем пополам через COM+ обертку я запустил скрипты на x64 сервере
Но чего-то мне это вообще не понравилось
Слишком много танцев с бубнами
80. Ийон Тихий (cool.vlad4) 08.04.13 17:16
(79) а что вам нужно-то? хэши -md5 и sha1 под виндовый сервак 64 бита? на c# такое за полчаса-час максимум делается. http://msdn.microsoft.com/ru-ru/library/system.security.cryptography.aspx
ЗЫ и не надо говорить, что нет dotnet-а. не поверю.
81. Ийон Тихий (cool.vlad4) 08.04.13 17:33
(79) mvgfirst, ну что-то вы не ответили, хотя сообщение прочли. можно поиграться вот так
  asc = Новый COMОбъект("System.Text.ASCIIEncoding");
	  enc = Новый COMОбъект("System.Security.Cryptography.SHA1CryptoServiceProvider");
      bytes = asc.GetBytes_4("Hello");
	  hashBytes = enc.ComputeHash_2(bytes);
	  Сообщить(hashBytes);
...Показать Скрыть

но это такой же костыль как и со скриптами. да и с кодировками.
82. Василий Мазурок (mvgfirst) 08.04.13 17:35
(80) cool.vlad4,
а что вам нужно-то? хэши -md5 и sha1 под виндовый сервак 64 бита?
Именно, только в виде внешней компоненты (которую кстати здесь и обсуждаем)
на c# такое за полчаса-час максимум делается.

Уверен что именно так и есть на самом деле. Но я не пишу на c#, я не пишу внешние компоненты и вообще давно уже отошел от "низкоуровневого програмирования" поэтому - это не про меня.
83. Василий Мазурок (mvgfirst) 08.04.13 17:37
А приведенную ссылку я изучал. И даже мне вот подсказали вот это: http://batcoh.livejournal.com/66407.html
84. Ийон Тихий (cool.vlad4) 08.04.13 17:39
(83) честно говоря мне лениво следить за всей веткой. если несложно киньте в личку описания функций, что вам нужны. я подумаю, что смогу сделать(сегодня правда, не обещаю). сервак 64 битный у меня под рукой имеется.
85. Ийон Тихий (cool.vlad4) 08.04.13 17:41
(83) там жуткий код. а другого наверное от смешения capicom, adodbstream, .net и 1С и не получится.
Минусы - во-первых говорят, COM достаточно медленно работает.
COM, конечно не быстрый, но думаю скорость у него просядает из-за того, он COM инициализирует при каждом вычислении хэша. не очень-то благоразумно.
86. Василий Мазурок (mvgfirst) 08.04.13 17:53
Нужно мне ровно то что делает сабжевая компонента.
А именно
Хеш MD5 на вход который принимает строку а не файл (который должен работать очень быстро - мне его по условиям ТЗ ндо вычислять 1102 раза для каждого отсылаемого пакета)
Хеш SHA1 на вход тоже строка

Base64 - на вход должен принимать строку. Пробовал использовать родной 1С-овский. Но он работает только с двоичными данными - и как результат банк не принимает такой файл.

В 32-х разрядной среде - все это работает с помощью этой компоненты. В 64-х разрядной - компонента просто не пдключается.
87. Андрей (sttt) 08.04.13 17:55
(83) mvgfirst, может это подойдет Компонента скомпилируешь исходники под 64 у меня ее нет под рукой. в архиве готовая dll для 32. возможно не так сделал))
88. Андрей (sttt) 08.04.13 17:57
(86) mvgfirst, сами процедуры в stmd5.cs а в обработке как использовать
89. Ийон Тихий (cool.vlad4) 08.04.13 18:00
(87) не подойдет. в таком виде по крайне мере. ВК по такой технологии(COM) на сервере не работает. Надо на чистый COM переписать.
(86) понятно. завтра отпишусь о результате.
90. Василий Мазурок (mvgfirst) 08.04.13 18:03
Ок. Жду результатов. Я так понял - это будет еще одна Nativе-ная компонента.
А можно тогда сразу сделать две версии и под 32 и под 64 разряда. Что бы универсальная была. Я тогда в коде разделю... и буду подключть в зависимости от окружения.

Ну или одну которая сработает и там и там, если такое возможно конечно.
91. Ийон Тихий (cool.vlad4) 09.04.13 14:55
(90)не , это, не нативная, это же c#. если хочется нативную, могу на плюсах попробовать, но уже чуть позже(сегодня/завтра/послезавтра,как получится). это COM компонента, в архиве в reg64.bat - для регистрации в 64 битах. у меня на сервере работает. компонента простая как 5 копеек, - 2 с половиной метода, там же исходные коды, если захочется поменять. Также в backup
PS. не думаю, что на плюсах сложно, если взять готовую либу.
Прикрепленные файлы:
getHashVK.zip
92. Ийон Тихий (cool.vlad4) 09.04.13 15:02
+(91) и да, если не хочется создавать каждый раз com объект на сервере, можно использовать http://infostart.ru/public/62410/
93. Василий Мазурок (mvgfirst) 09.04.13 15:04
(91) cool.vlad4,
если хочется нативную, могу на плюсах попробовать,
Думаю надо пробовать... насколько я понял на сервере 1С предприятия работают только Нативные внешние компоненты.
Я готов подождать Нативную, т.к. с горем пополам уже запустил генерацию хешей на скриптах... но каждый день боюсь что перетанет работать из-за .... короче из-за чего угодно...

И конечно же я хочу заменить скрипты, на вызов внешней компоненты... поэтому готов и буду ждать нативную. Уверен что многие со мной согласятся. А если в нее можно будет добавлять другие полезные мелочи (например sleep) то тоже будет приятно
94. Ийон Тихий (cool.vlad4) 09.04.13 15:09
(93) хорошо. но вот это
насколько я понял на сервере 1С предприятия работают только Нативные внешние компоненты.

не совсем верно. COM компоненты прекрасно работают на сервере 1С предприятия, в том числе написанные и на C#. Ваши же скрипты работают? а вызываются они по COM-у. Это обычные ВК не работают. Native-работают и там, и там. Вообще путаницу в терминах 1С хорошо внесла этими компонентами и Native.
95. Василий Мазурок (mvgfirst) 09.04.13 17:23
А вот чисто теоретически, какой метод выполнится быстрее из COM или из Native-комопненты, при условии что алгоритм и язык программирования один и тот же?
96. Василий Мазурок (mvgfirst) 09.04.13 17:24
Хотя, на сервере Native-компоненту нужно извлечь из макета и подключить, а COM-объект нужно всего лишь подключить. Но все равно... Native, даже исходя из названия (перевода) - как родная а значит должна работать быстрее
97. andrewks 09.04.13 22:40
(95) mvgfirst, думаю, COM будет быстрее (но совсем чуть-чуть), из-за особенностей реализации Native-компонент 1С
98. Ийон Тихий (cool.vlad4) 15.04.13 11:34
(96) пока сырая, пресырая, но меня сейчас интересует, работает ли под сервером 64 у тебя, т.е. стоит ли доделывать. Использовал стандартный 1С шаблон ВК. Так, что подключить как обычно
Если Не ПодключитьВнешнююКомпоненту(Путь,"DemoLib",ТипВнешнейКомпоненты.Native) Тогда
Возврат; КонецЕсли;
ОбъектВК = Новый("AddIn.DemoLib.AddInNativeExtension");
ОбъектВК.ToBASE64(стр);
ОбъектВК.SHA1(стр);
ОбъектВК.MD5(стр);
...Показать Скрыть
Прикрепленные файлы:
AddInNative64.dll
99. Василий Мазурок (mvgfirst) 15.04.13 11:59
Принял, спасибо.
Как раз сейчас доделываю свой универсальный планировщик - как раз будет возможность протестировать.
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа