1C-фукция Base64Строка() работает? #723360


#0 by sintez1234
Стоит задача, зашифровать строку, передаваемую на сервер тремя алгоритмами. Маюсь давно уже, 2 алгоритма из трех реализовал уже. Надо зашифровать и подписать через SHA1, SHA515 и Base64 Во всем мне помогает PHP-сырцы, где уже все есть. Мне надо с PHP перевести на 1С, чтобы больше не нужно было ставить на ПК юзеров PHP-сервер. Остался самый последний штрих! Многомесячной работы! :) Последняя проблема! В PHP такая строка: И это работает. В 1С у меня уже попадают правильные $accessKey и $hash. Я пробую вот так, но это не работает, возращает вообще пустую строку, 1С-код: Как видим, параметр Base64Строка принимает только один, потому и не работает. Пробовал уже через запятую ей второй вставить - ругается так: Слишком много фактических параметров (Base64Строка) В синтакс-помошнике так: Глобальный контекст (Global context) Base64Строка (Base64String) Синтаксис: Base64Строка(<Значение>) Параметры: Тип: ДвоичныеДанные. Двоичные данные, которые необходимо закодировать по алгоритму base64. Т.е. сразу видно что проблемы как минимум две: 1) У меня строка, а функция Base64Строка принимает ДвоичныеДанные. Как переделать строку в двоичные данные средствами 1с я не знаю. 2) Во-вторых, сильно я сомневаюсь что без ключа вообще получится правильный результат, а ключ функция не принимает в принципе. С двумя другими алгоритмами шифрования задовница была еще больше, средствами чисто 1с никак, использовал виндовые библиотеки. Видимо с Base64 придется поступить похожим образом. Возможно нужно написать похожую на эту функцию. Я нашел в реестре что-то похожее на нужное. Есть вот эти две интересны штуки: Из названия понятно что они делают. Как юзать не понятно, примут ли они ключ, тоже не понятно. Короче была у меня мечта сегодня закончить многомесячный труд, но видимо не сбыться ей :(
#1 by sintez1234
не SHA515, а SHA512. Опечатка. Впрочем не важно, оно то работает уже.
#2 by Рэйв
Сдается мне все это нахрен никому не нужно, кроме начальника, у которого параноя.
#3 by Рэйв
+Я бы даже уточнил. Мания преследования.
#4 by Рэйв
Извини за вопрос. Что ты там делаешь?
#5 by sintez1234
эта штука подключается к биржам, и фигачит там сделки. Да, на голой 1С без приблуд. Сейчас только PHP-сервер иногда юзаем, но вот-вот и он станет не нужен. Биржевые боты на 1с, страшное изощрение, но работает.
#6 by sintez1234
биржи принимают только вот так зашифрованные запросы. Т.е. неадекватного начальства тут нет. Это реально надо :(
#7 by sintez1234
Нагуглил только одну тему по теме во всем рунете :( Вот Полистал и помереть хочется :(
#8 by sintez1234
БЛИИИИИИИИИИИИН!!! )))))))))) Так там не надо ключа то!!! Это жо строка голимая! base64_encode($accessKey.':'. $hash), Это одна строка там! Типа такая: Строка = "123123:d-9g08df08gdf98gd9f8g";
#9 by sintez1234
Тогда остается другой вопрос, как теперь преобразовать обычную строку в ДвоичныеДанные 1С? Ведь Base64Строка принимает только их, строки не понимает.
#10 by wertyu
>>> Как переделать строку в двоичные данные средствами 1с
#11 by Рэйв
Биржи и 1С.... А я то  думал не доживу до конца света. Спасибо,Господи!
#12 by wertyu
ты так говоришь, как-будто биржи это нечто запредельное
#13 by Рэйв
Да нет. Просто оно с 1с все равно что кефир с солеными огурцами.
#14 by Рэйв
поотдельности вкусно
#15 by sintez1234
пробую! :)
#16 by sintez1234
так-с... вроде строка похожа на нужную вышла. Проверяю сейчас все ли правильно
#17 by sintez1234
не, что-то не так. Строка очень похожая, но отличается от того что выдает PHP, разбираюсь почему, может в другом совсем ошибка.
#18 by sintez1234
опаньки! :) Строка которую PHP дает, то что надо: ZWMyYjVjMmQtZjhkMS00ZTRmLWFiMDMtMDBmYWI4MjA0NzU4OjRjYzkxMmNkMmJkMThjNDUzYTRiNWMxNmY4OGFjNzFhNzg0NGQzNjY= Строка которую дает твой код: 77u/ZWMyYjVjMmQtZjhkMS00ZTRmLWFiMDMtMDBmYWI4MjA0NzU4OjRjYzkxMmNk MmJkMThjNDUzYTRiNWMxNmY4OGFjNzFhNzg0NGQzNjY= Как видим разница только в том, что в начале 4 символа, которые можно просто обрезать функцией Прав. Напишу скоро получилось ли всё как надо :)
#19 by sintez1234
Жесть.... Сервер: 401 Unauthorized - invalid hash length Ладно хоть Base64 строчка теперь правильная есть. Буду дальше курить что опять серверу не нравится, че у него длинное там опять. Тебе спасибо огромное :)
#20 by sintez1234
Оказалось что итоговая строка не только содержит 4 не нужных мне символа в начале, но и почему то есть символ перевода строки. Я его убрал так: Ругань на длинну исчезла. Теперь новая ошибка :) Ну ладно, прогресс то есть, когда-нибудь ошибки закончатся... может даже в этом году ) Во что пишет, фиг знает что надо: Request unsuccessful. Incapsula incident ID: 0-82421556293668197
#21 by sintez1234
Ну вообще охренеть, я 1С-кой под анти DDoS фильтр попал... случится же такое...
#22 by Torquader
Строка должна иметь кодировку. в php все строки однобайтовые, но символы кодируются через UTF-8, а в 1С 8.Х строки двухбайтовые. Соответственно, получается, что для Base64 строки будут совершенно разные. Если уж очень-очень хочется победить, тем более, что символы в ключе и Hash наверняка латинские, то можно написать преобразование в Base64 самому. Или посмотреть, как она коверкает двухбайтовые символы и "выкусить" старший байт.
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С