Имя: Пароль:
1C
1С v8
XOR для двух строк
0 Alex_MA
 
21.09.11
15:28
Всем доброго дня!

Есть две строки полученные в результате хеш ф-ии MD5:

Строка1 = "32a17408d6eb3e25c6c3c00351a9128f";
Строка2 = "827ccb0eea8a706c4c34a16891f84e7b";

каждый символ строки - шеснадцатиричное число, необходимо получить

Строка3 = Строка1 XOR Строка2;

Как бы такое реализовать ?
Подскажите пожалуйста. Спасибо за внимание, за советы и ответы премного благодарен.
1 Fragster
 
гуру
21.09.11
15:29
1000 рублей
2 andrewks
 
21.09.11
15:32
(0) в курсе, что xor - это не шифрование, а баловство?
3 aleks-id
 
21.09.11
15:34
(2) xor вкупе с shl/shr очень даже ничаго...
4 Alex_MA
 
21.09.11
15:35
(2) в курсе
5 Alex_MA
 
21.09.11
15:38
(2)я думаю как это лучше сделать ?
каждый символ - это набор байтов, т.е. если по такому алгоритму, то тогда

Строка1 = "01000110 010001100..."
Строка2 - аналогично

и дальше уже к битам применять XOR ?
6 proger2011
 
21.09.11
15:38
(0) А в чём собственно проблема? Представить это всё в двоичном виде? Или применить попозиционно xor?
7 Alex_MA
 
21.09.11
15:40
получим Строка3 = "тоже набор бит". А если Строка3 сконвертировать в символы, не получится ли "абры-кодабры" (символ перевода строки, или еще какие нибудь "страшные" символы)?
8 Alex_MA
 
21.09.11
15:40
(6) как в (5) ?
9 andrewks
 
21.09.11
15:41
(7) чо?  _heximal_!!!
10 Steel_Wheel
 
21.09.11
15:41
(7) В целом неважно, т.к. строка всего лишь не будет отображаться в текстовых редакторах
11 sda553
 
21.09.11
15:43
Вначале в цикле составить в памяти таблицу 16х16 всех xorов для пары чисел от 0 до f
потом обходим по символам строку и из таблицы получаем результат в результирующую строку
12 proger2011
 
21.09.11
15:44
(7) Ну попробуй хоть один придумай страшный символ
13 Alex_MA
 
21.09.11
15:46
(11)поподробней можно, близко к истине
14 andrewks
 
21.09.11
15:49
охренеть..
а не проще ли в jscript несколько строчек накидать?
15 Alex_MA
 
21.09.11
15:51
(14)нужно в 1С
16 andrewks
 
21.09.11
15:52
(15) на сервере под линем?
17 Alex_MA
 
21.09.11
15:55
(16)не под линем :)
18 proger2011
 
21.09.11
15:56
(11) Какие таблицы... Ну может с ними быстрее или чё нить ещё. Я бы просто сделал для каждого i-го символа

Рез=(стр1[i]="0" И стр2[i]="1") Или (стр1[i]="1" И стр2[i]="0");
19 sda553
 
21.09.11
15:58
СтрокаВсехСимв = "0123456789abcdef"
ТаблицаКсоров = Новый соответствие;
Для x =0 по 16 Цикл
Для y=0 по 16 Цикл
   ЛевыйОперанд = Сред(СтрокаВсехСимв,x+1,1);
   ПравыйОперанд = Сред(СтрокаВсехСимв,y+1,1);
   Результат = МойКсор(ЛевыйОперанд,ПравыйОперанд);
   ТекСоответствие = ТаблицаКсоров[ЛевыйОперанд];
   Если ТекСоответствие =Неопределено Тогда
     ТекСоответствие  = Новый Соответствие;
   КонецЕсли;
   ТекСоответствие.Вставить(ПравыйОперанд, Результат);
   ТаблицаКсоров.Вставить(ЛевыйОперанд, ТекСоответствие);
 КонецЦикла;
КонецЦикла;
//Составляем результат хэша для строки
Строка3="";
Для зы=1 По СтрДлина(Строка1) Цикл
 Строка3 = Строка3+ТаблицаКсоров[Сред(Строка1,зы,1)][Сред(Строка1,зы,1)];
КонецЦикла;
//результат в строка3
20 sda553
 
21.09.11
15:59
(19) а...как обычно там ошибки мелкие, но суть понятна

Строка3="";
Для зы=1 По СтрДлина(Строка1) Цикл
 Строка3 = Строка3+ТаблицаКсоров[Сред(Строка1,зы,1)][Сред(Строка2,зы,1)];
КонецЦикла;
//результат в строка3
21 proger2011
 
21.09.11
16:01
(19) Да так лучше конечно...
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший