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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.01.2008, 07:37   #1
Simply-Art
Программист и
Участник клуба
 
Аватар для Simply-Art
 
Регистрация: 29.10.2006
Сообщений: 1,265
Восклицание Алгоритм шифрования

Код:
function CT(Text,Key: String; Encode: boolean): String;
var
  i, KeyLength: integer;
  Sign: ShortInt;
begin
 KeyLength:=Length(Key);
 if Encode then Sign :=1 else Sign:=-1; // true - шифровать
 for i:=1 to Length(Text) do
  Text[i]:=chr(ord(Text[i])+Sign*ord(Key[i mod KeyLength+1]));
  CT:=Text;
end;
Я обнаружил косяк, если мы получаем
Код:
ord(Text[i])+Sign*ord(Key[i mod KeyLength+1])
здесь число кратное 256 (... ,-256, 0, 256, ...) то символ то пропадает, как это возможно исправить?
Simply-Art вне форума Ответить с цитированием
Старый 30.01.2008, 08:27   #2
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

В тексте ошибка - char + integer
Если исправить, то будет переполнение
Лучше использовать xor:
Код:
function CT(Text,Key: String): String;
var  
  i, KeyLength: integer;   
begin  
  KeyLength:=Length(Key);   
 
  for i:=1 to Length(Text) do begin
     Text[i] := CHR(ord(Text[i]) xor (ord(key[(i-1) mod KeyLength+1])));   
  end;
  CT := Text;   
end;

//   S := CT('testString', 'key'); // шифровать
//   S := CT(S, 'key'); // расшифровать
//   ShowMessage(S); // S = 'testString';
alexBlack вне форума Ответить с цитированием
Старый 30.01.2008, 12:27   #3
Simply-Art
Программист и
Участник клуба
 
Аватар для Simply-Art
 
Регистрация: 29.10.2006
Сообщений: 1,265
По умолчанию

Не хочу огорчать, но и этот алгоритм не проходит тест.
Simply-Art вне форума Ответить с цитированием
Старый 30.01.2008, 13:13   #4
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

Какой тест ?
Вообще-то я его компилировал и проверил (нижние три строчки).
Потом просто cut-paste -
Есть код теста ?

Есть еще предположение.

text[i] xor key[i] дает 0, если оба символа одинаковы

Для длинных строк это признак конца строки, поэтому нужно использовать ShortString.
Исправьте в объявлении функции. Проверил еще раз. Работает.

Последний раз редактировалось alexBlack; 30.01.2008 в 13:30.
alexBlack вне форума Ответить с цитированием
Старый 30.01.2008, 16:35   #5
Simply-Art
Программист и
Участник клуба
 
Аватар для Simply-Art
 
Регистрация: 29.10.2006
Сообщений: 1,265
По умолчанию

Просто попробуй кинуть текст вышенаписаного кода в мемо и зашифровать, расшифровать, косяк на лицо, даже если с обнулением разобраться ЗЫ у меня нули уже не появляются. Я вот думаю это скорей всего косяк компонента, потому что определенные символы почемуто сливаются в один, и как результат, смещение кода, ключа, и вообще неправильного перевода.
Simply-Art вне форума Ответить с цитированием
Старый 30.01.2008, 18:14   #6
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

а почему бы просто не поставить breakpoint и не посмотреть,что получается. Или задача состоит в том, чтобы увидеть шифровку memo ? там же в основном непечатные символы - тогда нужно менять алгоритм шифрования. В любом случае давай код. Посмотрим
alexBlack вне форума Ответить с цитированием
Старый 30.01.2008, 18:33   #7
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Чего-то я никак проблему не пойму. Ну и что, что 0 получается? просто обрабатывать зашифрованые данные не в виде строк и всё...
B_N вне форума Ответить с цитированием
Старый 30.01.2008, 19:05   #8
Simply-Art
Программист и
Участник клуба
 
Аватар для Simply-Art
 
Регистрация: 29.10.2006
Сообщений: 1,265
По умолчанию

Какой код давать?!? все и так выше написано. Задача элементарна как свет, надо взять текст из мемо, зашифровать и сохранить, затем выполнить обратный процесс.
Simply-Art вне форума Ответить с цитированием
Старый 31.01.2008, 08:06   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Я может не в тему, но может поменять алгоритм шифрования на другой?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 31.01.2008, 08:24   #10
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

Цитата:
Сообщение от Simply-Art Посмотреть сообщение
Какой код давать?!? все и так выше написано. Задача элементарна как свет, надо взять текст из мемо, зашифровать и сохранить, затем выполнить обратный процесс.
Взять текст из мемо, зашифровать:

Код:
var S:String;
procedure TForm1.Button1Click(Sender: TObject);
begin
   S := CT(Memo1.text, 'key');
   Memo1.text := '';
end;
Расшифровать и поместить в мемо

Код:
procedure TForm1.Button2Click(Sender: TObject);
begin
   Memo1.text := CT(S, 'key');
end;
Обрати внимание, шифрованный текст не помещаем в мемо.
В нем есть управляющие символы, которые мемо не отображает или обрабатывает по своему. Не будем путать две проблемы. Процедура шифрования работает. А если нужно еще и отобразить шифрованный текст, то мемо не подойдет или текст нужно показывать в hex-коде
alexBlack вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Алгоритм шифрования Диффи-Хеллмана! Kaifolom Помощь студентам 3 09.08.2013 06:37
Очень срочно! Алгоритм шифрования DES... Regloger Помощь студентам 15 14.05.2013 17:04
[Алгоритм] Симметричного шифрования tuxx32 Помощь студентам 6 13.05.2010 09:39
работа с текстом (алгоритм шифрования) GAGARIN-NEW Компоненты Delphi 7 18.10.2007 09:48