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) 

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


Anatoly Podgoretsky   (2007-09-17 13:53:00) [41]

> Denis_  (17.09.2007 13:43:42)  [42]

Base64, Hex


Инс   (2007-09-17 13:51:00) [42]

0 xor x = x, проверяется же элементарно :) Да и табличку истинности знать надо бы.


Инс   (2007-09-17 13:49:00) [43]


> C этого места поподробней бы...:)

Как опять???? Анатолий, повторим? Или может автор почитает обсуждение. :)


Denis_   (2007-09-17 13:43:00) [44]


> Уже привлек

Но не как модератора, ведь так?:)

> то надо преобразовать в одну из транспортных кодировок

C этого места поподробней бы...:)

А я подумал, что 0 xor x = 0. Поэтому он и "мешает". Это не так?


Anatoly Podgoretsky   (2007-09-17 13:34:00) [45]


> Denis_ ©   (17.09.07 13:20) [38]

Символы #0 не мешают.
А если мешают, то должны мешать и некоторые другие непечатные символы.
По моему уже не раз сказали, не использовать результат шифрации в текстовых функциях и визуальных контролах. Если надо куда то передавать, за пределы строки, то надо преобразовать в одну из транспортных кодировок и это будет универсально для любого алгоритма шифрации.


Anatoly Podgoretsky   (2007-09-17 13:24:00) [46]

> Denis_  (17.09.2007 12:53:37)  [37]

Уже привлек
Угрожаешь :-)


{RASkov}   (2007-09-17 13:24:00) [47]

> [38] Denis_ ©   (17.09.07 13:20)

function XorString(const Key, Src: ShortString): ShortString;
var
 I: Integer;
begin
 Result := Src;
 if Length(Key) > 0 then
   for I := 1 to Length(Src) do
     Result[I] := Chr(Byte(Key[1 + ((I - 1) mod Length(Key))]) xor Ord(Src[I]));
end;

function XorEncode(const Key, Source: string): string;
var
 I: Integer;
 C: Byte;
begin
 Result := '';
 for I := 1 to Length(Source) do begin
   if Length(Key) > 0 then
     C := Byte(Key[1 + ((I - 1) mod Length(Key))]) xor Byte(Source[I])
   else
     C := Byte(Source[I]);
   Result := Result + AnsiLowerCase(IntToHex(C, 2));
 end;
end;

function XorDecode(const Key, Source: string): string;
var
 I: Integer;
 C: Char;
begin
 Result := '';
 for I := 0 to Length(Source) div 2 - 1 do begin
   C := Chr(StrToIntDef('$' + Copy(Source, (I * 2) + 1, 2), Ord(' ')));
   if Length(Key) > 0 then
     C := Chr(Byte(Key[1 + (I mod Length(Key))]) xor Byte(C));
   Result := Result + C;
 end;
end;

© RxStrUtils.pas


Denis_   (2007-09-17 13:20:00) [48]

Для того, чтобы в строке небыло символов #0  сделал так
function XOR_Algoritm(s,Key : String) : String;
var
 i : Integer;
 c : Char;
begin
 Result:='';
 for i:=1 to Length(s) do
 begin
   c:=Chr(Ord(s[i]) xor ord(Key[i mod Length(Key)+1]));
   if c <> #0 then
     Result:=Result+c
   else
     Result:=Result+s[i];
 end;
end;


Denis_   (2007-09-17 12:53:00) [49]


> {RASkov} ©   (16.09.07 18:35) [19]

Спасибо ещё раз.
Anatoly Podgoretsky, Инс - Спасибо за обсуждение.

Сергей М. С Вами я больше спорить не буду, а то это привлечёт внимание Анатолия не как участника обсуждения, а как модератора.


{RASkov}   (2007-09-16 21:43:00) [50]

> [35] Anatoly Podgoretsky ©   (16.09.07 21:39)
> А ты что надеешься увидеть и остальные непечатные символы, кроме #0

Вижу.... какими-то квадратиками, черточками - но вижу.)
А вот после #0 - всё, пусто... :)

> PChar дополнительно еще и испортит строки, и не только PChar.

?
Что-то не понял - кто кого испортит.... (


Anatoly Podgoretsky   (2007-09-16 21:39:00) [51]

> {RASkov}  (16.09.2007 21:33:33)  [33]

А ты что надеешься увидеть и остальные непечатные символы, кроме #0
PChar дополнительно еще и испортит строки, и не только PChar.


Инс   (2007-09-16 21:38:00) [52]


> установка таких свойств как Text, Caption идет функциями
> API которые в свою очередь "понимают" только PChar

Да и оконная функция класса EDIT и прочих подобных тоже.


{RASkov}   (2007-09-16 21:33:00) [53]

> Код в [16] разумеется неверный, так как текстовый приемник,
> такой как TEdit не покажет правильно результат шифрования

Этот код как раз для этого и был написан...
Именно для показа чем грозит #0 в строке, так как для String это фиолетово, а PChar - чревато....
установка таких свойств как Text, Caption идет функциями API которые в свою очередь "понимают" только PChar
поэтому и происходит "обрезание"... в [19] есть поправочка на этот счет > Это автору вопроса.


Anatoly Podgoretsky   (2007-09-16 21:01:00) [54]

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


Инс   (2007-09-16 20:57:00) [55]


> [30] Anatoly Podgoretsky ©   (16.09.07 20:22)

Я написал в [29] результатом чего он как правило является. Дело не именно в XOR разумеется, а в том, что иногда результат преобразования строки (путем шифрования, например), после которой она строкой перестает быть, нужно также представить в текстовом виде. А для этого очень хорошо подойдет преобразование в hex или base64. Именно это я и пытаюсь сказать, с этим спорить будете? Код в [16] разумеется неверный, так как текстовый приемник, такой как TEdit, не покажет правильно результат шифрования. Но если такая задача возникнет, то это можно сделать.


Anatoly Podgoretsky   (2007-09-16 20:22:00) [56]

> Инс  (16.09.2007 19:36:29)  [29]

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


Инс   (2007-09-16 19:36:00) [57]


> Зачем смотреть, смотреть не надо, это не для человеческих
> глаз.

Иногда бывает что надо. В Shareware-программах, вам зачастую предлагают ввести в текстовое поле ключ, который как правило представляет собой результат шифрований, хэширования, или и того и другого одновременно. Вот для того, чтобы это было возможно, его часто преобразуют в Base64. За примером далеко ходить не надо - The Bat.


Инс   (2007-09-16 19:32:00) [58]


>  [27] Sha ©   (16.09.07 19:17)

Спасибо, я в курсе, просто мы тут под строкой понимаем не тип String, а некий буфер, содержащий только печатные символы.


Sha   (2007-09-16 19:17:00) [59]

> Инс ©   (16.09.07 18:56) [25]
> Я понимаю, что после XOR строки уже не будет

Ты имеешь полное право любой символ строки заменить на #0,
и строка при этом строкой останется.
Но такие строки имеют некоторые особенности. Например:
1.Ты должен учитывать что при преобразовании к PChar, этот замененный символ будет терминатором.
Т.е. данные не годятся для непосредственного отображения в контролах.
2.Для чтения данных с диска не стоит использовать ReadLn,
т.к. это будет уже не текстовый файл.


Anatoly Podgoretsky   (2007-09-16 19:07:00) [60]

> Инс  (16.09.2007 18:56:25)  [25]

Зачем смотреть, смотреть не надо, это не для человеческих глаз.


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

Наверх

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