URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 9172
[ Назад ]

Исходное сообщение
"Как в /bin/sh красиво отксорить строку ключом? "

Отправлено DeadLoco , 25-Июн-11 23:02 
В циклах - понятно, но не нравится. Нутром чую, что должно быть элегантное решение, но найти не могу.


Содержание

Сообщения в этом обсуждении
"Как в /bin/sh красиво отксорить строку ключом? "
Отправлено dogonthesun , 26-Июн-11 08:36 
> В циклах - понятно, но не нравится. Нутром чую, что должно быть
> элегантное решение, но найти не могу.

приведите пример исходных строк, ключа и вывода.


"Как в /bin/sh красиво отксорить строку ключом? "
Отправлено Aquarius , 26-Июн-11 11:46 
> В циклах - понятно, но не нравится. Нутром чую, что должно быть
> элегантное решение, но найти не могу.

/bin/sh /bin/sh'у рознь


"Как в /bin/sh красиво отксорить строку ключом? "
Отправлено pavlinux , 27-Июн-11 16:29 
>  Нутром чую, что должно быть элегантное решение, но найти не могу.

И не найдёшь.


"Как в /bin/sh красиво отксорить строку ключом? "
Отправлено DeadLoco , 27-Июн-11 16:33 
>>  Нутром чую, что должно быть элегантное решение, но найти не могу.
> И не найдёшь.

Обоснуй.


"Как в /bin/sh красиво отксорить строку ключом? "
Отправлено pavlinux , 27-Июн-11 16:36 
>>>  Нутром чую, что должно быть элегантное решение, но найти не могу.
>> И не найдёшь.
> Обоснуй.

XOR это побитовая операция над целыми или битовая над логическим операндами.
Поэтому "WORLD" ^ "KEY" - звучит глупо, хотя бы из-за того что не совпадает размер строк.


"Как в /bin/sh красиво отксорить строку ключом? "
Отправлено DeadLoco , 27-Июн-11 16:38 
> XOR это побитовая операция над целыми или битовая над логическим операндами.
> Поэтому "WORLD" ^ "KEY" - звучит глупо, хотя бы из-за того что
> не совпадает размер строк.

ОМГ.


"Как в /bin/sh красиво отксорить строку ключом? "
Отправлено pavlinux , 27-Июн-11 16:41 
>> XOR это побитовая операция над целыми или битовая над логическим операндами.
>> Поэтому "WORLD" ^ "KEY" - звучит глупо, хотя бы из-за того что
>> не совпадает размер строк.
> ОМГ.

Ну тогда поясняй на языке мат. логики задачу "красиво отксорить строку ключом"



"Как в /bin/sh красиво отксорить строку ключом? "
Отправлено DeadLoco , 27-Июн-11 17:14 
> Ну тогда поясняй на языке мат. логики задачу "красиво отксорить строку ключом"

Гугль на тему "XOR-криптование" выдает массу полезной инфы. Если гуглить лень, то вкратце идея следующая: строка сообщения "HELLO WORLD" побайтно ксорится с циклическим повторением ключа "KEYKEYKEYKE". Повторный ксор по ключу восстанавливает исходное сообщение. Для коротких сообщений и длинных ключей - наиболее надежный и эффективный метод симметричного шифрования. Но нам же это знать совершенно ни к чему, верно?



"Как в /bin/sh красиво отксорить строку ключом? "
Отправлено pavlinux , 27-Июн-11 17:36 
> строка сообщения "HELLO WORLD" побайтно ксорится

А можно еще и так


for i in "HELLO WORLD"  
  do
     i = i XOR "K";
     i = i XOR "E";
     i = i XOR "Y";
done

или так, со сдвигом.

for i in "HELLO WORLD"  
  do
     i = i XOR "K";
     i = i XOR "E";
     i = i XOR "Y";
     i++;
     i = i XOR "E";
     i = i XOR "Y";
     i = i XOR "K";
     i++;
     i = i XOR "Y";
     i = i XOR "E";
     i = i XOR "K";
done

:)

> с циклическим повторением ключа

Точно! Осталось придумать ацикличный, потоковый XOR :)



"Как в /bin/sh красиво отксорить строку ключом? "
Отправлено pavlinux , 27-Июн-11 18:03 
>> Ну тогда поясняй на языке мат. логики задачу "красиво отксорить строку ключом"
> Гугль на тему "XOR-криптование" выдает массу полезной инфы. Если гуглить лень, то
> вкратце идея следующая: строка сообщения "HELLO WORLD" побайтно ксорится с циклическим
> повторением ключа "KEYKEYKEYKE". Повторный ксор по ключу восстанавливает исходное сообщение.

1. Тебе нужно расширить длину ключа до длины "HELLO WORLD"

без цикла делается это SIZEOF("HELLO WORLD") / SIZEOF("KEY");  получим 4
перед тем как начать потоковый XOR придется объединить все "KEY" 4 раза,
иначе без цикла не получиться. Для объединения нужон аналог strcat()


#include <string.h>

char *strcat(char *s, char *append)
{
    char *save = s;

    for (; *s; ++s);
       while ((*s++ = *append++) != 0);

  return(save);
}


Облом, опят цикл.



"Как в /bin/sh красиво отксорить строку ключом? "
Отправлено Aquarius , 27-Июн-11 22:20 
>> Ну тогда поясняй на языке мат. логики задачу "красиво отксорить строку ключом"
> Гугль на тему "XOR-криптование" выдает массу полезной инфы. Если гуглить лень, то
> вкратце идея следующая: строка сообщения "HELLO WORLD" побайтно ксорится с циклическим
> повторением ключа "KEYKEYKEYKE". Повторный ксор по ключу восстанавливает исходное сообщение.
> Для коротких сообщений и длинных ключей - наиболее надежный и эффективный
> метод симметричного шифрования. Но нам же это знать совершенно ни к
> чему, верно?

ни к чему, верно
только это твоя проблема, как задавшего вопрос, сделать так, чтобы вопрос был не только вполне понятен, но и, по возможности, не допускал неоднозначной трактовки


"Как в /bin/sh красиво отксорить строку ключом? "
Отправлено DeadLoco , 27-Июн-11 23:06 
> только это твоя проблема, как задавшего вопрос, сделать так, чтобы вопрос был
> не только вполне понятен, но и, по возможности, не допускал неоднозначной
> трактовки

"Отксорить строку ключом" - совершенно однозначная постановка вопроса, вполне понятная тем, кто в теме.

Экскюзе се муа, не в моих силах сделать все понятным каждому. Я бы этого очень хотел, это значительно упростило бы жизнь, но увы.


"Как в /bin/sh красиво отксорить строку ключом? "
Отправлено pavlinux , 28-Июн-11 01:39 
> "Отксорить строку ключом" - совершенно однозначная постановка вопроса, вполне понятная
> тем, кто в теме.

Постановка однозначная, решений может быть дофига, но без цикла никак.


"Как в /bin/sh красиво отксорить строку ключом? "
Отправлено DeadLoco , 28-Июн-11 02:00 
> Постановка однозначная, решений может быть дофига, но без цикла никак.

Жаль, строковых функций приличных нет. Щас еще сед/авк колупаю.


"Как в /bin/sh красиво отксорить строку ключом? "
Отправлено Aquarius , 28-Июн-11 03:53 
>> Постановка однозначная, решений может быть дофига, но без цикла никак.
> Жаль, строковых функций приличных нет. Щас еще сед/авк колупаю.

и все-таки, интересно было бы знать, о какой системе идет речь
я предполагаю, что о FreeBSD, раз нет рассуждений о несоизмеримости возможностей bash и dash
не пойму только, почему для всех участников дискуссии это очевидно, а для меня нет


"Как в /bin/sh красиво отксорить строку ключом? "
Отправлено pavlinux , 28-Июн-11 04:20 
> не пойму только, почему для всех участников дискуссии это очевидно, а для
> меня нет

Врубай метод исключений.  

1. XOR операция битовая.
2. Строка это не элементарный тип.
3. Строка это массив байт.
4. Две строки - два массива.
5. XOR на двумя строками сводиться к XOR над элементами из этих массивов.
6. Единственно, них...я не сказано про порядок выборки операндов для XOR.
7. Автор хочет, не применяя циклов, сделать XOR меж двумя строками, по описанным выше правилам.    
8. Область определения, видимо утилиты UNIX или shell.

:)



"Как в /bin/sh красиво отксорить строку ключом? "
Отправлено Aquarius , 28-Июн-11 09:57 
>[оверквотинг удален]
> 2. Строка это не элементарный тип.
> 3. Строка это массив байт.
> 4. Две строки - два массива.
> 5. XOR на двумя строками сводиться к XOR над элементами из этих
> массивов.
> 6. Единственно, них...я не сказано про порядок выборки операндов для XOR.
> 7. Автор хочет, не применяя циклов, сделать XOR меж двумя строками, по
> описанным выше правилам.
> 8. Область определения, видимо утилиты UNIX или shell.
> :)

из всего этого списка я говорил только про 8
а теперь моя очередь :)
1. /bin/sh, в общем случае, не может быть абстрактым
2. например, в GNU/Linux раньше это (почти всегда) был bash
3. теперь это (еще только будет) (во многих случаях) еще и dash
4. во FreeBSD, NetBSD (и, видимо, OpenBSD) это ash
5. оно все, конечно же, должно соответствовать POSIX, и, вроде как, так оно и есть (а вот теперь я понял)


"Как в /bin/sh красиво отксорить строку ключом? "
Отправлено DeadLoco , 28-Июн-11 12:34 
> не пойму только, почему для всех участников дискуссии это очевидно, а для меня нет

Потому что /bin/sh, на самом деле - весьма конкретная сущность, а не абстрактный пойнт, на который что хочу, то и линкую. Да, будучи надмножествами sh, разные *ash могут заменять классический sh Борна, но посиксовым стандартом является, все-таки, именно sh, и именно sh в наибольшей степени обеспечивает межплатформенную и версионную совместимость. При всей убогости его средств.


"Как в /bin/sh красиво отксорить строку ключом? "
Отправлено Aquarius , 28-Июн-11 13:47 
>> не пойму только, почему для всех участников дискуссии это очевидно, а для меня нет
> Потому что /bin/sh, на самом деле - весьма конкретная сущность, а не
> абстрактный пойнт, на который что хочу, то и линкую. Да, будучи
> надмножествами sh, разные *ash могут заменять классический sh Борна, но посиксовым
> стандартом является, все-таки, именно sh, и именно sh в наибольшей степени
> обеспечивает межплатформенную и версионную совместимость. При всей убогости его средств.

да, спасибо!
я уже пришел к пониманию


"Как в /bin/sh красиво отксорить строку ключом? "
Отправлено ACCA , 28-Июн-11 15:21 
>> Постановка однозначная, решений может быть дофига, но без цикла никак.
> Жаль, строковых функций приличных нет. Щас еще сед/авк колупаю.

Чем тогда тот же gpg -c --passphrase 'KEY' неполноценен?


"Как в /bin/sh красиво отксорить строку ключом? "
Отправлено Aquarius , 28-Июн-11 20:59 
>>> Постановка однозначная, решений может быть дофига, но без цикла никак.
>> Жаль, строковых функций приличных нет. Щас еще сед/авк колупаю.
> Чем тогда тот же gpg -c --passphrase 'KEY' неполноценен?

видимо, тем, что gpg не является компонентом /bin/sh


"Как в /bin/sh красиво отксорить строку ключом? "
Отправлено ACCA , 29-Июн-11 23:10 
>>>> Постановка однозначная, решений может быть дофига, но без цикла никак.
>>> Жаль, строковых функций приличных нет. Щас еще сед/авк колупаю.
>> Чем тогда тот же gpg -c --passphrase 'KEY' неполноценен?
> видимо, тем, что gpg не является компонентом /bin/sh

Угу. А sed/awk, значит, являются...


"Как в /bin/sh красиво отксорить строку ключом? "
Отправлено DeadLoco , 30-Июн-11 13:32 
> Угу. А sed/awk, значит, являются...

Ключевое слово, в данном конкретном случае - POSIX

И незачем нервничать. Я вот тоже не могу решить эту задачку, но не нервничаю же :)