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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.06.2011, 15:44   #1
Zibiv
Пользователь
 
Регистрация: 27.09.2008
Сообщений: 64
Счастье Вставка произвольных непечатных символов перед шифрованием

Добрый день! у меня появился вопрос. Подскажите пожалуйста, есть текст который шифруется определенным способом. НО перед шифрованием в текст добавляются хаотично и рандомно непечатные символы, затем шифруетцо, передается, расшифровывается и вытягиваются рандомные непечатные символы ( То что интересует выделено жирным). (нужно для того что бы повысить уровень криптозашиты, даже если одним и темже ключом шифровать одино и тоже слово или текст, шифро текст будет все время разный)

Я уже выписал алгоритм добавления убирания символов в отдельную программку(ПРИЛАГАЕТСЯ) и вот какой баг нашел, он бывает не всегда но очень часто, и очень мешает при дальнейшем шифровании.
Вот код:
Код:
const
  NPCS: set of char = [#0..#8, #11, #12, #14..#31, '' ];

function NO(Source: string): string;
var
  n, c: integer;
begin
  Randomize;
  Result := Source;
  n := (Length(Source) * 2) + Random(Length(Source));
  while Length(Result) < n do
  begin
    c := Random(128);
    if Chr(c) in NPCS then
      Insert(Chr(c), Result, Random(Length(Result)) + 1)
  end;
end;

function NT(Source: string): string;
var
  i: integer;
begin
  Result := Source;
  i := 1;
  while i < Length(Result) do
    if Result[i] in NPCS then
      Delete(Result, i, 1)
    else
      Inc(i);
end;

procedure TForm1.btn1Click(Sender: TObject);
Var
a,s,g:string;
begin
s:=NO(edt1.Text);
ShowMessage(' "'+s+'"');
edt3.Text:=NT(s);
g:=edt3.Text;
end;

Теперь в чем итить его баг заключается. Например введем в первый edt текст: “Привет мои друзья”, текст с добавлением выглядит так “П р ив ¬ е т мо и д рузья” (все верно) и после убирания символов, опять: “Привет мои друзья”. НО если сделать несколько попыток прокрутить этот текст через функции, иногда даже бывает с первого раза такая хрень.
в первый edt текст: “Привет мои друзья”, текст с добавлением выглядит так “ При в ет” (а как раз эта часть уже идет на шифрацию и при расшифрации получится уже конечно не то что вводилось….) , хотя в третий edt выведется все как надо…

В чем ошибка она кроется где то в первой функции в которой идет добавление символов….. подскажите что надо исправить.

Заранее спасибо за внимание!!!

------

Блин почемуто на форуме непечатные символы не отабражаются в примерах) Ну вы тгда программу скачайте из архвива все сразу будет видно
Вложения
Тип файла: rar Гамма.rar (170.3 Кб, 13 просмотров)
Zibiv вне форума Ответить с цитированием
Старый 01.06.2011, 17:36   #2
Swarog
Форумчанин
 
Аватар для Swarog
 
Регистрация: 26.01.2010
Сообщений: 215
По умолчанию

причина кроется в том как этот текст обрабатывает TEdit
Могу лишь пнуть в нужном направлении (ну или как получится)
Swarog вне форума Ответить с цитированием
Старый 01.06.2011, 17:45   #3
Zibiv
Пользователь
 
Регистрация: 27.09.2008
Сообщений: 64
По умолчанию

хммм, точно, Но по идеи переменной s тип данных у которого string и edit у него вроде тоже string?? Или я ошибаюсь. А как тогда сделать?)) По зарез нужно что бы выводило сам зашифрованный текст в edit…

Последний раз редактировалось Zibiv; 01.06.2011 в 17:51.
Zibiv вне форума Ответить с цитированием
Старый 01.06.2011, 17:52   #4
Swarog
Форумчанин
 
Аватар для Swarog
 
Регистрация: 26.01.2010
Сообщений: 215
По умолчанию

убери из непечатных символов #0. String то он string но едит строится на win32 api а там используются asciiz строки если мне не изменяет память
Могу лишь пнуть в нужном направлении (ну или как получится)
Swarog вне форума Ответить с цитированием
Старый 01.06.2011, 18:20   #5
Zibiv
Пользователь
 
Регистрация: 27.09.2008
Сообщений: 64
По умолчанию

Хаха , тогда у меня еще вопрос будет (убрал из символов #0) у меня далее идет шифрование и его рузультат выводится в edit

код функции шифрования простенький
Код:
 Result:='';
 for i:=1 to Length(dddd) do
  begin
   Result:=Result+Char(Byte(dddd[i]) xor (FKey shr 8));
   FKey:=(Byte(dddd[i])+FKey)*SKey+TKey;
  end;
После этого выводится в едит

Сразу ясно, что можно попасть при шифровании на символы которые не отражает edit и соответственно при расшифровки из edit'a у нас в некоторых случаях будет фигня, как избежать этих символов, таких как #0?
Zibiv вне форума Ответить с цитированием
Старый 01.06.2011, 18:31   #6
Swarog
Форумчанин
 
Аватар для Swarog
 
Регистрация: 26.01.2010
Сообщений: 215
По умолчанию

могу посоветовть не выводить в эдиты, все таки они не предназначены для этого, сохраняй в файл а преподу покажешь файл в hex виде, либо если хочешь еще позамарачиватсья в эдит выводи в нех виде .... просто каждый символ представишь в виде двух печатных [0..9,a..f]
Могу лишь пнуть в нужном направлении (ну или как получится)
Swarog вне форума Ответить с цитированием
Старый 01.06.2011, 18:42   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
По зарез нужно что бы выводило сам зашифрованный текст в edit…
ЗАЧЕМ?!!!!
Ну НЕ предназначен .Text для отображения непечатных символов....
(впрочем, как ShowMessage/MessageBox и т.п.)


Swarog, пост #6 в точку. +1

либо в HEX, либо в QuotedPrintable, либо в base64, либо в UUE - короче - используя любую систему преобразования непечатных символов в печатные!

Последний раз редактировалось Serge_Bliznykov; 01.06.2011 в 18:44.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 01.06.2011, 19:00   #8
Zibiv
Пользователь
 
Регистрация: 27.09.2008
Сообщений: 64
По умолчанию

Это уже сложновато. тоесть получается ни каким способом корректно на форму шифро текст не вывести?
Zibiv вне форума Ответить с цитированием
Старый 01.06.2011, 19:04   #9
Swarog
Форумчанин
 
Аватар для Swarog
 
Регистрация: 26.01.2010
Сообщений: 215
По умолчанию

на то непечатыемые коды так и называются что бы не выводится на экран
Могу лишь пнуть в нужном направлении (ну или как получится)
Swarog вне форума Ответить с цитированием
Старый 01.06.2011, 21:38   #10
Zibiv
Пользователь
 
Регистрация: 27.09.2008
Сообщений: 64
По умолчанию

Аааа ребята помогите еще пожалуйста))

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

Код:
if stream_open then
begin
while not eof(iput) do //зацикливается и соответственно не записывает write(oput,a);
begin
read(iput,c);
s:=Decrypt(c, FKey, SKey, TKey); 
write(oput,a);
end;
stream_close;
end;
iput, oput: text

все остальное integer...

помогите разобраться

А еще забыл

Код:
function stream_open:boolean;
begin
 stream_open:=false;
 if (inp<>'')and(outp<>'') then
 begin assignfile(iput,inp);
 reset(iput);
 assignfile(oput,outp);
 rewrite(oput);
 stream_open:=true;
end else showmessage('Íå çàäàíû ôàéëû ââîäà/âûâîäà äàííûõ!');
end;

procedure stream_close;
begin
 closefile(iput);
 closefile(oput);
end;
s:=Decrypt(c, FKey, SKey, TKey); тут в цикле не причем наверное, просто даже без него зацикливается и не дает записываться в файл... такое ощущение что не знает где конец у файла шифрованного.
Во вложении пример шифрованного текста, именно из него все берется...

И само главное, врежиме отладки он считывает весь текст из файла и расшифровывает его полностью и правльно в функции потом возвращает значени в процедуру и начинается канитель с зацикливанием...
Вложения
Тип файла: txt ШифроТекст.txt (86 байт, 127 просмотров)

Последний раз редактировалось Zibiv; 01.06.2011 в 21:48.
Zibiv вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вставка символов Senjja Microsoft Office Word 14 19.12.2013 14:52
Прроблемы с шифрованием Ker_33rus Общие вопросы C/C++ 9 21.11.2010 17:54
Вставка записи, перед которой стоит ноль artemavd БД в Delphi 3 28.06.2010 06:54
Помогите с Шифрованием на С++ Сергей Человек Общие вопросы C/C++ 0 29.11.2009 16:03
Помогите пожалуйста с шифрованием! AnutkaSolnce Помощь студентам 5 19.05.2007 21:32