Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

XOR алгоритм


Страницы:   1 2 3 4 5

Denis_ ©   (2007-09-16 15:56:00) 

Несколько раз встречал здесь вопрос о таком методе шифрования, и стало интересно , как его реализовать.Как?


Denis_   (2007-09-22 13:56:00) [1]


> Где-то у меня в свалке валяется pas-модуль, написанный ещё
> лет 20 назад

Я ещё тогда не родился даже.


Anatoly Podgoretsky   (2007-09-22 11:58:00) [2]

> Германн  (22.09.2007 00:32:23)  [83]

Наверно про стеганографию говоришь?
Если да, то это не шифровка.


Германн   (2007-09-22 00:32:00) [3]


> Я сделал это!!!

Где-то у меня в свалке валяется pas-модуль, написанный ещё лет 20 назад. Предназначался для шифровки любого текстового документа так, что бы никто его не понял, но и никто бы не заподозрил, что это шифровка :-)
P.S. Написан был не мной.


palva   (2007-09-21 22:37:00) [4]

> Если кто расшифрует, звоните, или в аську стучите.
Неужели с расшифровкой вам тоже надо помогать?


Сергей М.   (2007-09-21 22:24:00) [5]


> Если кто расшифрует, звоните, или в аську стучите.


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

Я даже боюсь предположить, что вся Вселенная ломанулась расшифровывать твой велосипед и звонить тебе, не говоря уже о стучать на тебя твоей "асе")


Denis_   (2007-09-21 17:54:00) [6]

Я сделал это!!! правда позавчера ещё, но учёба, учёба...Вот зашифровал свои данные. Если кто расшифрует, звоните, или в аську стучите.
mzaJtCiX21OQx0a6mXSIpIeR1YmBuj4E20JDF+KX1XaEn2i33XC8xAgDJesJiiCD2W7k1CKKmAIkgiN-rzejrDJLmCtT-i0D2e7DW8oIYUpEh4MAYPxToTN+rzXWbe60ZvU0li2QLGqA7mWGo+p6q1FLrz-4oTBXszyjrz0D2l4BFi386DFGtCt9qVp3tHB9rzy

всё в одну строку.Без пробелов.Все буквы - латинские. :D

Cпасибо Anatoly Podgoretsky, Инс, Zeqfreed, {RASkov}. Очень помогли.


Zeqfreed   (2007-09-18 20:56:00) [7]

> Anatoly Podgoretsky ©   (18.09.07 20:44) [78]

Ну я-то понимаю что будет результатом, спасибо :)


Anatoly Podgoretsky   (2007-09-18 20:44:00) [8]

> Zeqfreed  (18.09.2007 20:38:16)  [76]

Я показал не только более оптимальный вариант, такой цели особо не было, а использование логических операторов AND и OR - результатом будет или $30 или $31 - коды символов '0' и '1'


Anatoly Podgoretsky   (2007-09-18 20:42:00) [9]

> Zeqfreed  (18.09.2007 20:31:13)  [73]

Для получения Base64 лучше воспользоваться готовыми функциями из ICS или INDY


Zeqfreed   (2007-09-18 20:38:00) [10]

> Denis_ ©   (18.09.07 20:25) [71]

Мой код демонстрирует лишь сам принцип. Как уже поправил Анатолий, есть более оптимальный вариант. А для Base64-кодирования получать строку из всех битов нет необходимости.


Zeqfreed   (2007-09-18 20:36:00) [11]

> Anatoly Podgoretsky ©   (18.09.07 20:14) [69]

Если задача получить строковое представление данных, то это, несомненно, самый оптимальный вариант :)


Anatoly Podgoretsky   (2007-09-18 20:33:00) [12]

> Denis_  (18.09.2007 20:17:10)  [70]

Как же не написано, для установки в позицию бита 2 (счет с нуля) делаем 1 shl 2
Результат проверь на бумажке, тогда будет понятно как это работает. Но вроде бы это в статье графически проилюстрировано, но лучше самому убедиться, просто полезнее прочувствовать это когда выполняешь на бумажке, тогда это останется в голове навечно.


Zeqfreed   (2007-09-18 20:31:00) [13]

> : как лучше подставлять символы под 6 бит?

Лучше обратиться к RFC ( http://tools.ietf.org/html/rfc3548#section-3) и воспользоваться готовыми таблицами.

Алгоритм улучшить (по скоростным и морально-этическим соображениям) можно отказавшись от использования строковых буферов для обработки потока информации.


Anatoly Podgoretsky   (2007-09-18 20:30:00) [14]

> Denis_  (18.09.2007 20:17:10)  [70]

Вместо кучи команд по преобразованию бита - одна единственная. Результат записывать в Result


Denis_   (2007-09-18 20:25:00) [15]


> Zeqfreed ©   (18.09.07 19:54) [67]

Кстати , что-то подобное Вашему коду я и имел в виду под
> 1) получить все биты  ,записать их в строку '11000010010001.
> ....'

:)))


Denis_   (2007-09-18 20:17:00) [16]


> N and 1 or $30

А это что сделает? Анатолий, я просто не понял в Ваше й статье момент один
Получение позиции бита или его значения
1 shl N

В данном примере единица сдвигается влево на нужное количество разрядов, и в результате получаем двоичное значение, равное 2^N, где в установлен один единственный бит, соответствующий разряду числа. Этот прием может использоваться с переменной для расчета позиции во время выполнения или во время компиляции, во втором случае код генерироваться не будет, а компилятор просто рассчитает значение и подставит его в программу, не генерируя дополнительного кода. Это удобно для указания номера бита, не представляя его в виде десятичной или шестнадцатеричной константы. Но чаще бывает удобнее использовать именованные константы, поскольку они более информативны, примеры этого будут приведены в конце статьи.

как получить значение не написано...:) А я так надеялся на это:). Разьясните,а?


Anatoly Podgoretsky   (2007-09-18 20:14:00) [17]

> Zeqfreed  (18.09.2007 19:54:07)  [67]

N and 1 or $30


Denis_   (2007-09-18 20:12:00) [18]


> Zeqfreed ©   (18.09.07 19:54) [67]

Спасибо!
Я уж почти разобрался. А ещё : как лучше подставлять символы под 6 бит?
например
000001 соответствует 'A' и т.п.?
И вообще, как сделать [66] по человечески?:).(т.е. как ещё улучшить мой алгоритм?)


Zeqfreed   (2007-09-18 19:54:00) [19]

> Denis_ ©   (18.09.07 19:28) [66]

> 1) получить все биты  ,записать их в строку '11000010010001.
> ....'

Лучше так не делать, а делать сразу по-человечески. Для затравки дам такой код:

function getBits(n : Byte) : String;
begin
       Result := '';

       repeat
               if (n and $80 = $80) then              
                       Result := Result + '1'
               else
                       Result := Result + '0';

               n := n shl 1;
       until (n = 0);

       while (length(Result) < 8) do
               Result := Result + '0';
end;


В строчке if (n and $80 = $80) thenмы проверяем, установлен ли старший бит.
В строчке n := n shl 1;сдвигаем все биты на позицию влево. Старший бит пропадает, а шестой становится на его место. Так можно получить значения всех битов по очереди.


Denis_   (2007-09-18 19:28:00) [20]


> Начал читать

И сразу появились вопросы:((( Например, как получить значение бита по номеру?
В разделе "Получение позиции бита или его значения" непонятно как-то написано, нечего конкретного. 1 shl N даёт 2^N , а что дальше делать?
Хочу сделать перевод в Base64 так
1) получить все биты  ,записать их в строку '11000010010001.....'
2) из этой строки брать по 6 бит и ставить им в соответствие какой-либо печатный символ
3)вывести эту строку.

если есть замечания, прошу!


Страницы:   1 2 3 4 5

Наверх

Титульная страница Поиск, карта сайта Написать письмо