Имя: Пароль:
1C
1C 7.7
v7: XOR в 1С7.7
,
0 Melcor
 
11.11.12
18:09
Стоит задача зашифровать число, код контрагента, для передачи его, посредством смс, клиенту, клиент называет пришедший ему код оператору, тот вбивает его в 1С, а 1С уже распознает в нем код контрагента. XOR  в 1С не предусмотрен, насколько мне известно, всё что находил до этого шифрует в кракозябры, а надо получить удобочитаемый код.
1 АЛьФ
 
11.11.12
18:12
2 Бешеная Нога
 
11.11.12
18:12
Скидывай клиенту уникальный идетификатор
3 Chai Nic
 
11.11.12
18:15
"XOR  в 1С не предусмотрен"
Ну, вообще-то 1с - это алгоритмически полный язык, и на нем можно реализовать тот же самый xor без особых проблем)
4 Melcor
 
11.11.12
18:15
(2) нужен постояно разный код, в будет меняться в зависимости от времени, и надо чтобы продавцы не догадались как он получается, ибо скидку давать он будет
5 Melcor
 
11.11.12
18:16
(3) Наверно знаний не хватает (, думал вдруг у кого-то есть уже готовое решение
6 Chai Nic
 
11.11.12
18:17
То есть, задача состоит в генерации "тикета" в виде хеша, в котором закодирован контрагент и еще какие-то данные? А в чем проблема вообще? Берешь и пишешь..
7 Melcor
 
11.11.12
18:17
(1) Блин, там всё по англицки, не понятно как работает)
8 Melcor
 
11.11.12
18:18
(6) Ну да, типа того. Дык а как зашифровать, что бы никто не догадался, что за циферки я там передаю
9 Chai Nic
 
11.11.12
18:22
(8) "а как зашифровать, что бы никто не догадался"
Ну так не показывай код заинтересованным лицам :)
Я как-то делал давно примитивное хеширование для проверки пароля на запуск отчета в семерке. Тупо складывал вместе коды символов пароля, умноженные на позицию символа в строке. Далее получал остаток от деления полученного числа на размер хэша. Можно было поискать в интернете математически хорошие методы, просто не было особого смысла.
10 Melcor
 
11.11.12
18:23
(9) Полученный код буду вбивать операторы, после того как клиент уйдет, они попробуют вбить его еще раз, и он ессенно подойдет, скидку сделают, разницу в карман
11 Melcor
 
11.11.12
18:26
нашел интересную штуку, только как вот обратно расшифровать)
Функция XOR(Знач пПар1 = 0, Знач пПар2 = 0) Экспорт
   пК = 1;
   Для й = 1 По 8 Цикл
       пРез = (пПар1 % 2 + пПар2 % 2) % 2 * пК + пРез;
       пПар1 = Цел(пПар1 / 2);
       пПар2 = Цел(пПар2 / 2);
       пК = пК * 2;
   КонецЦикла;
   Возврат пРез;
КонецФункции
12 Chai Nic
 
11.11.12
18:26
(10) Что мешает при выписке счета проверить, была ли уже продажа по этому коду или нет? Как например делают сотовые операторы при использовании скретч-карт оплаты.
13 Melcor
 
11.11.12
18:28
(12) А если клиент что-то забыл и решил купить еще? ему ведь смс с тем же кодом придет
14 Chai Nic
 
11.11.12
18:34
(13) Ну это какой алгоритм выдачи кода сделаешь
15 Бешеная Нога
 
11.11.12
18:37
(13) как это стыкуется с (10)
16 BlackSeaCat
 
11.11.12
19:07
(0) Тебе не XOR нужен, тебе постановка задачи нужна. А это денег стоит.
17 vde69
 
11.11.12
19:45
XOR - к шифрованию не имеет отношения, кроме того результатом может получится нечитаемый символ, тебе нужен base64 он на выходе гарантировано дает читаемую последовательность, только в конце знаки равно убери что-бы догадатся было сложнее...

http://www.softmaker.kz/files.php?cat=8&id=24&lang=RU


Base64.dll

Внешняя компонента для преобразования файлов из/в кодировку Base64 из встроенного языка 1С Предприятие.

Методы объекта Addin.Base64:


EncodeBase64, ЗакодироватьBase64(FileName) - можно обращаться к методу в русском или английском варианте


Читает файл FileName.
Преобразует этот файл в закодированную base64 строку.

Параметры: FileName - имя файла
Возвращаемое значение: закодированная base64 строка.

DecodeBase64, РаскодироватьBase64(FileName) - можно обращаться к методу в русском или английском варианте


Читает файл FileName.
Преобразует этот файл в обычную строку.

Параметры: FileName - имя файла
Возвращаемое значение: обычная строка

Для работы с компонентой скопируйте файл Base64.dll, например в каталог базы данных.

В конфигураторе используйте функцию ЗагрузитьВнешнююКомпоненту:
Процедура ПриОткрытии()
   Если ЗагрузитьВнешнююКомпоненту(КаталогИБ() + "Base64.dll")=0 Тогда
       Сообщить("Не удается загрузить Base64.dll!");
       Возврат;
   Иначе
       Сообщить("Удалось загрузить Base64.dll!");    
   КонецЕсли;
КонецПроцедуры    // ПриОткрытии

// Преобразует файл в Base64 строку
Функция Base64(ПутьКФайлу)
   Попытка
       ВК = СоздатьОбъект("AddIn.Base64");
   Исключение
       Сообщить("Не удается создать объект AddIn.Base64!");
       а=1/0;
   КонецПопытки;
   СтрокаИзФайла = ВК.ЗакодироватьBase64(ПутьКФайлу);
   Возврат СтрокаИзФайла;
КонецФункции    // Base64