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

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

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

Восстановить пароль

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 13.05.2012, 21:57   #1
JekaDefer
Форумчанин
 
Регистрация: 07.04.2009
Сообщений: 112
По умолчанию Xor шифрование TStringList

Есть функция шифрования самая простенькая
Код:
function Encrypt(const InString: string; StartKey, MultKey, AddKey: Integer):string;
var
  i: Integer;
begin
  Result := '';
  for i := 1 to Length(InString) do
  begin
    Result := Result + CHAR(Byte(InString[i]) xor (StartKey shr 8) xor (Length(InString)+1-i));
    StartKey := ((Byte(Result[i]) + StartKey) * MultKey + AddKey);
  end;
end;
Использование этой функции:
Код:
procedure TForm1.Button1Click(Sender: TObject);
Var
  Sl: TStringList;
  i: Integer;
Begin
  Sl := TStringList.Create;
  Sl.Add('');
  Sl.Text:=Encrypt(Sl.Text , 12345, 23456, 23452);
end;
Откуда после её использования длина Sl=4? если там только 2 символа - конец строки и перевод каретки...
JekaDefer вне форума
Старый 13.05.2012, 22:11   #2
3D Hunter
Сумрачная тень
Форумчанин
 
Аватар для 3D Hunter
 
Регистрация: 05.03.2009
Сообщений: 689
По умолчанию

Функцией какой пользуетесь? И что считаете: символы или байты? Возможно, юникод двухбайтовый, отсюда и длина в 4 байта. Потому про байты и спросил.
"ковыряю изнутри" (с)
3D Hunter вне форума
Старый 13.05.2012, 22:23   #3
JekaDefer
Форумчанин
 
Регистрация: 07.04.2009
Сообщений: 112
По умолчанию

Цитата:
Сообщение от 3D Hunter Посмотреть сообщение
Функцией какой пользуетесь? И что считаете: символы или байты? Возможно, юникод двухбайтовый, отсюда и длина в 4 байта. Потому про байты и спросил.
Выше весь код.. Функция Encrypt.. если дело в Unicode то можно как нибудь хз указать что ли TStringList'у чтоб использовал 2символьное что нибудь) смысл в том что если добавить в TStringList только ''(пустое место) и сделать так
Код:
For i:= 1 to Length(TStringList.Text) do ShowMessage(IntToStr(Byte(TStringList.Text[i])));
то высветится 2 значения 10 и 13.. т.е. 13 это перевод строки а 10 по ходу признак конца строки.
JekaDefer вне форума
Старый 13.05.2012, 22:24   #4
SNUPY
Форумчанин
 
Регистрация: 15.02.2008
Сообщений: 621
По умолчанию

Ставьте точку останова и смотрите что там в Sl.Text
Помог? Ну так нажми на весы!
SNUPY вне форума
Старый 13.05.2012, 22:26   #5
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Присвоение в StringList.Text на автомате добавляет в конец перевод каретки и строки
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума
Старый 13.05.2012, 22:52   #6
JekaDefer
Форумчанин
 
Регистрация: 07.04.2009
Сообщений: 112
По умолчанию

Всё, разобрался. Все из-за
Цитата:
Присвоение в StringList.Text на автомате добавляет в конец перевод каретки и строки
(Спс Аватар)
чтоб норм шифровалось сделал так:
Функции:
Код:
function Encrypt(const InString: string; StartKey, MultKey, AddKey: Integer):string;
var
  i: Integer;
begin
  Result := '';
  for i := 1 to Length(InString) do
  begin
    Result := Result + CHAR(Byte(InString[i]) xor (StartKey shr 8) xor (Length(InString)+1-i));
    StartKey := ((Byte(Result[i]) + StartKey) * MultKey + AddKey);
  end;
end;


function Decrypt(const InString: string; StartKey, MultKey, AddKey: Integer): string;
var
  i: Integer;
begin
  Result := '';
  for i := 1 to Length(InString) do
  begin
    Result := Result + CHAR(Byte(InString[i]) xor (StartKey shr 8) xor (Length(InString)+1-i));
    StartKey := ((Byte(InString[i]) + StartKey) * MultKey + AddKey);
  end;
end;
Обработка:
Код:
procedure TForm1.Button1Click(Sender: TObject);
Var
  Sl: TStringList;
begin
  Sl:= TStringList.Create;
  Sl.Add(Edit1.Text);
  Sl.Text:=EnCrypt(Sl.Text, 12345,54354,23432);
  Sl.SaveToFile('1.txt');
end;

procedure TForm1.Button2Click(Sender: TObject);
Var
  Sl: TStringList;
  s: String;
begin
  Sl:= TStringList.Create;
  Sl.LoadFromFile('1.txt');
  s:=sl.Text;
  Delete(s, Length(s)-2, 2);
  Sl.Text:=DeCrypt(s, 12345,54354,23432);
  Edit2.Text:=Sl.Strings[0];
end;

Последний раз редактировалось JekaDefer; 14.05.2012 в 12:43.
JekaDefer вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
xor шифрование (delphi) CAMOBAP Помощь студентам 16 11.01.2011 00:02
xor-шифрование Halyna Помощь студентам 0 06.12.2010 17:24
XOR шифрование. 0479 Помощь студентам 4 14.09.2010 16:24
Ох уж эти OR, AND, XOR! NSV Свободное общение 6 27.03.2010 10:38