Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.01.2012, 02:25   #1
riderpro
Пользователь
 
Регистрация: 04.10.2011
Сообщений: 16
По умолчанию xor текста из Memo

Доброй ночи!
Ситуация такая,подгружаю текст из текстового файла в memo(или просто ввожу) и пытаюсь построчно xor-ить.

нашел алгоритм в инете,плюс добавил своего,получилось что-то наподобии

Код:
procedure TForm5.Button3Click(Sender: TObject);
var
s,key,text,longkey:string;
toto:char;
i,j:integer;
begin
key:=Edit1.Text;
for j:=0 to (Memo1.Lines.Count-1) do
begin
text:='';
s:=Memo1.Lines[j];
for i := 0 to (length(s) div length(key)) do
longkey := longkey + key;

for i := 1 to length(s) do
begin
toto := chr((ord(s[i]) XOR ord(longkey[i]))); 
text := text + toto;
end;
Memo2.Lines[j]:=text;
end;
end;
отказывается работать
где ошибка? или лучше оформить по другому?

первая проблема решена. проблема 2: xor только первой строчки

Последний раз редактировалось riderpro; 09.01.2012 в 02:28.
riderpro вне форума Ответить с цитированием
Старый 09.01.2012, 11:08   #2
3D Hunter
Сумрачная тень
Форумчанин
 
Аватар для 3D Hunter
 
Регистрация: 05.03.2009
Сообщений: 689
По умолчанию

Где именно отказывается? Выдает ошибку во время работы или при компиляции?
"ковыряю изнутри" (с)

Последний раз редактировалось 3D Hunter; 09.01.2012 в 11:10.
3D Hunter вне форума Ответить с цитированием
Старый 09.01.2012, 11:08   #3
3D Hunter
Сумрачная тень
Форумчанин
 
Аватар для 3D Hunter
 
Регистрация: 05.03.2009
Сообщений: 689
По умолчанию

например, можно так попробовать:
Код:
function TextCrypt(const AText,AKey:AnsiString):AnsiString;
var
  i,j:Integer;
  LStr,LKey:AnsiString;
  LsTempList:TStringList;
begin
  Result:='';
  try
    LsTempList:=TStringList.Create;
    LsTempList.Text:=AText;
    for i:=0 to LsTempList.Count-1 do
    begin
      LStr:=LsTempList[i];//присвоили строку

      //расширение ключа для текущей строки
      LKey:='';
      for j:=0 to (Length(LStr) div Length(AKey)) do
        LKey:=LKey+AKey;

      //xor текста и ключа (результат записываем в hex-формате воизбежание проблем отображения)
      for j:=1 to Length(LStr) do
        Result:=Result+IntToHex(Byte(LStr[j]) xor Byte(LKey[j]),2);
    end;
  finally
    FreeAndNil(LsTempList);
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Memo1.Text:=TextCrypt(Memo1.Text,'demokey');
end;
"ковыряю изнутри" (с)
3D Hunter вне форума Ответить с цитированием
Старый 09.01.2012, 11:26   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

все это бесполезно.
в результате XOR могут получится (и получаются!) НЕПЕЧАТНЫЕ символы.
А визуальные компоненты (такие как TMemo, например) - НЕ ПРЕДНАЗНАЧЕНЫ для отображения таких символов.
Какой выход, спросите Вы?
Ну, прежде всего, зачем нужно отображать ЗАШИФРОВАННЫЙ текст в мемо?! Охота посмотреть на "кракозябры"?! Поэтому самый логичный вывод - отказаться от использования Memo для отображения зашифрованного текста.
Если же, по какой-то тайной прихоти всё же необходимо отобразить шифровку в мемо, тогда можно воспользоваться алгоритмом преобразования непечатных символов в печатные (см. алгоритмы UUECODE, BASE64, благо они достаточно просты, да и реализаций их полно).


p.s. если поискать на форуме, я тут уже обсуждал подобную проблему и, если мне память верна, там в теме были готовые решения...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 09.01.2012, 11:33   #5
3D Hunter
Сумрачная тень
Форумчанин
 
Аватар для 3D Hunter
 
Регистрация: 05.03.2009
Сообщений: 689
По умолчанию

Serge_Bliznykov, я предложил нормальное решение в этом плане) крякозябры выводятся hex-представлением в тот же мемо.
"ковыряю изнутри" (с)
3D Hunter вне форума Ответить с цитированием
Старый 09.01.2012, 15:15   #6
riderpro
Пользователь
 
Регистрация: 04.10.2011
Сообщений: 16
По умолчанию

3D Hunter, спасибо,но вот теперь расшифровать не получается
как вернуть этот набор символов в исходный вид?

Последний раз редактировалось riderpro; 09.01.2012 в 16:51.
riderpro вне форума Ответить с цитированием
Старый 09.01.2012, 16:26   #7
riderpro
Пользователь
 
Регистрация: 04.10.2011
Сообщений: 16
По умолчанию

я так понимаю,что нужна процедура преобразование hex обратно в символы,а потом снова xor?

Последний раз редактировалось riderpro; 09.01.2012 в 16:52.
riderpro вне форума Ответить с цитированием
Старый 09.01.2012, 19:33   #8
3D Hunter
Сумрачная тень
Форумчанин
 
Аватар для 3D Hunter
 
Регистрация: 05.03.2009
Сообщений: 689
По умолчанию

Правильно понимаете. А сделать легко - организуете цикл от 1 до "длина зашифрованного текста, деленная на 2" и считываете в нем по 2 символа, преобразуете их в байт, затем ксорите с исходным ключом (процедура расширения ключа та же, но относительно уже приведенной строки к бинарному виду из hex).
Вот вам в помощь следующий код на основе моего предыдущего:
SimpleTextCryptDecrypt.zip

Переработал шифрование, сделал еще легче. Смотрите исходники.
"ковыряю изнутри" (с)
3D Hunter вне форума Ответить с цитированием
Старый 09.01.2012, 19:36   #9
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
считываете в нем по 2 символа, преобразуете их в байт
эмм что?
это как?
учитывая что SizeOf(AnsiChar)==1, а SizeOf(UnicodeChar)==2.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 09.01.2012, 20:36   #10
3D Hunter
Сумрачная тень
Форумчанин
 
Аватар для 3D Hunter
 
Регистрация: 05.03.2009
Сообщений: 689
По умолчанию

Пепел Феникса, вы невнимательно прочли тему. Идет речь про 2 символа в hex формате, т.е. например $C7.
"ковыряю изнутри" (с)
3D Hunter вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Копирование текста из Memo bulkin2000 Компоненты Delphi 3 30.04.2012 14:03
Проверка текста Memo fineleave Помощь студентам 4 11.06.2011 21:48
Загрузка текста в Memo quarty Общие вопросы Delphi 8 21.10.2010 21:52
memo атрибут текста grom333 Помощь студентам 10 21.03.2010 20:34
Вставка текста в memo Revan Общие вопросы Delphi 2 23.05.2008 17:45