В циклах - понятно, но не нравится. Нутром чую, что должно быть элегантное решение, но найти не могу.
> В циклах - понятно, но не нравится. Нутром чую, что должно быть
> элегантное решение, но найти не могу.приведите пример исходных строк, ключа и вывода.
> В циклах - понятно, но не нравится. Нутром чую, что должно быть
> элегантное решение, но найти не могу./bin/sh /bin/sh'у рознь
> Нутром чую, что должно быть элегантное решение, но найти не могу.И не найдёшь.
>> Нутром чую, что должно быть элегантное решение, но найти не могу.
> И не найдёшь.Обоснуй.
>>> Нутром чую, что должно быть элегантное решение, но найти не могу.
>> И не найдёшь.
> Обоснуй.XOR это побитовая операция над целыми или битовая над логическим операндами.
Поэтому "WORLD" ^ "KEY" - звучит глупо, хотя бы из-за того что не совпадает размер строк.
> XOR это побитовая операция над целыми или битовая над логическим операндами.
> Поэтому "WORLD" ^ "KEY" - звучит глупо, хотя бы из-за того что
> не совпадает размер строк.ОМГ.
>> XOR это побитовая операция над целыми или битовая над логическим операндами.
>> Поэтому "WORLD" ^ "KEY" - звучит глупо, хотя бы из-за того что
>> не совпадает размер строк.
> ОМГ.Ну тогда поясняй на языке мат. логики задачу "красиво отксорить строку ключом"
> Ну тогда поясняй на языке мат. логики задачу "красиво отксорить строку ключом"Гугль на тему "XOR-криптование" выдает массу полезной инфы. Если гуглить лень, то вкратце идея следующая: строка сообщения "HELLO WORLD" побайтно ксорится с циклическим повторением ключа "KEYKEYKEYKE". Повторный ксор по ключу восстанавливает исходное сообщение. Для коротких сообщений и длинных ключей - наиболее надежный и эффективный метод симметричного шифрования. Но нам же это знать совершенно ни к чему, верно?
> строка сообщения "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 :)
>> Ну тогда поясняй на языке мат. логики задачу "красиво отксорить строку ключом"
> Гугль на тему "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);
}
Облом, опят цикл.
>> Ну тогда поясняй на языке мат. логики задачу "красиво отксорить строку ключом"
> Гугль на тему "XOR-криптование" выдает массу полезной инфы. Если гуглить лень, то
> вкратце идея следующая: строка сообщения "HELLO WORLD" побайтно ксорится с циклическим
> повторением ключа "KEYKEYKEYKE". Повторный ксор по ключу восстанавливает исходное сообщение.
> Для коротких сообщений и длинных ключей - наиболее надежный и эффективный
> метод симметричного шифрования. Но нам же это знать совершенно ни к
> чему, верно?ни к чему, верно
только это твоя проблема, как задавшего вопрос, сделать так, чтобы вопрос был не только вполне понятен, но и, по возможности, не допускал неоднозначной трактовки
> только это твоя проблема, как задавшего вопрос, сделать так, чтобы вопрос был
> не только вполне понятен, но и, по возможности, не допускал неоднозначной
> трактовки"Отксорить строку ключом" - совершенно однозначная постановка вопроса, вполне понятная тем, кто в теме.
Экскюзе се муа, не в моих силах сделать все понятным каждому. Я бы этого очень хотел, это значительно упростило бы жизнь, но увы.
> "Отксорить строку ключом" - совершенно однозначная постановка вопроса, вполне понятная
> тем, кто в теме.Постановка однозначная, решений может быть дофига, но без цикла никак.
> Постановка однозначная, решений может быть дофига, но без цикла никак.Жаль, строковых функций приличных нет. Щас еще сед/авк колупаю.
>> Постановка однозначная, решений может быть дофига, но без цикла никак.
> Жаль, строковых функций приличных нет. Щас еще сед/авк колупаю.и все-таки, интересно было бы знать, о какой системе идет речь
я предполагаю, что о FreeBSD, раз нет рассуждений о несоизмеримости возможностей bash и dash
не пойму только, почему для всех участников дискуссии это очевидно, а для меня нет
> не пойму только, почему для всех участников дискуссии это очевидно, а для
> меня нетВрубай метод исключений.
1. XOR операция битовая.
2. Строка это не элементарный тип.
3. Строка это массив байт.
4. Две строки - два массива.
5. XOR на двумя строками сводиться к XOR над элементами из этих массивов.
6. Единственно, них...я не сказано про порядок выборки операндов для XOR.
7. Автор хочет, не применяя циклов, сделать XOR меж двумя строками, по описанным выше правилам.
8. Область определения, видимо утилиты UNIX или shell.:)
>[оверквотинг удален]
> 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, на самом деле - весьма конкретная сущность, а не абстрактный пойнт, на который что хочу, то и линкую. Да, будучи надмножествами sh, разные *ash могут заменять классический sh Борна, но посиксовым стандартом является, все-таки, именно sh, и именно sh в наибольшей степени обеспечивает межплатформенную и версионную совместимость. При всей убогости его средств.
>> не пойму только, почему для всех участников дискуссии это очевидно, а для меня нет
> Потому что /bin/sh, на самом деле - весьма конкретная сущность, а не
> абстрактный пойнт, на который что хочу, то и линкую. Да, будучи
> надмножествами sh, разные *ash могут заменять классический sh Борна, но посиксовым
> стандартом является, все-таки, именно sh, и именно sh в наибольшей степени
> обеспечивает межплатформенную и версионную совместимость. При всей убогости его средств.да, спасибо!
я уже пришел к пониманию
>> Постановка однозначная, решений может быть дофига, но без цикла никак.
> Жаль, строковых функций приличных нет. Щас еще сед/авк колупаю.Чем тогда тот же gpg -c --passphrase 'KEY' неполноценен?
>>> Постановка однозначная, решений может быть дофига, но без цикла никак.
>> Жаль, строковых функций приличных нет. Щас еще сед/авк колупаю.
> Чем тогда тот же gpg -c --passphrase 'KEY' неполноценен?видимо, тем, что gpg не является компонентом /bin/sh
>>>> Постановка однозначная, решений может быть дофига, но без цикла никак.
>>> Жаль, строковых функций приличных нет. Щас еще сед/авк колупаю.
>> Чем тогда тот же gpg -c --passphrase 'KEY' неполноценен?
> видимо, тем, что gpg не является компонентом /bin/shУгу. А sed/awk, значит, являются...
> Угу. А sed/awk, значит, являются...Ключевое слово, в данном конкретном случае - POSIX
И незачем нервничать. Я вот тоже не могу решить эту задачку, но не нервничаю же :)