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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.08.2015, 22:33   #1
Dux
Delphi Master
Форумчанин Подтвердите свой е-майл
 
Аватар для Dux
 
Регистрация: 31.03.2008
Сообщений: 803
По умолчанию Шифрование текстового

Добрый день, необходимо сделать функцию, с помощью которой его можно зашифровать текстовый файл и при необходимости обратно де-шифровать. В файле содержаться как кириллические, так и латинские символы. Может у кого есть готовые наработки?
Dux вне форума Ответить с цитированием
Старый 11.08.2015, 22:41   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

http://www.programmersforum.ru/showt...oto=nextnewest
http://www.programmersforum.ru/showthread.php?t=58277
Там в моих примерах малость устаревшие методы работы с файлом, но смысл все же тот же.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 11.08.2015, 23:58   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

мой любимый XOR однозначно поможет.
вот только чуток напрягает, зачем Вы уточняете, что
Цитата:
В файле содержаться как кириллические, так и латинские символы.
...
Программе шифрования с помощью "исключающего ИЛИ" == XOR - всё равно, какие у Вас там символы, хоть текстовый файл шифруйте, хоть MP3, хоть картинку.
один нюанс - после шифрации набор символов становится НЕПЕЧАТНЫЙ, его нельзя просто так посмотреть или, тем паче, отобразить с помощью визуальных компонентов.
Это, конечно, тоже решается (например, с помощью base64), но, с другой стороны, зачем кому-то смотреть на ШИФРОВАННЫЙ код. Очевидно, что там для стороннего зрителя просто "шум"..
Serge_Bliznykov вне форума Ответить с цитированием
Старый 12.08.2015, 00:15   #4
JUDAS
фонатик DELPHI
Форумчанин
 
Аватар для JUDAS
 
Регистрация: 14.01.2008
Сообщений: 714
По умолчанию

Моя псевдошифровка пароля при сохранении пароля в ИНИШНИК
Пароль может быть набран как угодно

Код:
procedure  WritePassword(Ini:TIniFile; const Section, Value, Password : string);
var str : TMemoryStream;
    S   : string;
    dmp : array[0..63] of byte;
    i,j : integer;
begin
  if not Assigned(Ini) then exit;
  if Password='' then
  begin
    Ini.Writestring(Section, Value, '');
    exit;
  end;

  str := TMemoryStream.Create;
  for i:=0 to 63 do
  case i of
   00..31: dmp[i]:= I xor $C9;
   32..63: dmp[i]:= I xor $CC;
  end;
  S:='';
  while Length(S)<30 do
   S:=S+Password;
  SetLength(S,30);
  dmp[51]:= Length(Password) xor $7E;
  for i:=1 to Length(Password) do
  begin
    case i of
     1,3,5,6  : j:=i*7; // 7,21,35,42
     9,8,10   : j:=i*6; // 54,48,60
     2,4,7,11 : j:=i*4; // 8,16,28,44
     12..15,17..20,30 : j:=i;   //12..15,17..20
     23,25,26,28,29   : j:=i*2; //46.50.52.56.58
     16,27   : j:=i-16; //0,9
     21,22,24: j:=i-19; //2,3,5
    end;
    dmp[j]:=ord(Password[i]) xor dmp[j];
  end;
  str.Write(dmp[0], 64);
  str.Position:=0;
  Ini.WriteBinaryStream(Section, Value, str);
  str.Free;
end;

function ReadPassword(Ini:TIniFile; const Section, Value : string) : string;
var str : TMemoryStream;
    dmp,M : array[0..63] of byte;
    len : integer;
    i,j : integer;
begin
  result := '';
  FillChar(dmp[0],64,0);
  if not Assigned(Ini) then exit;
  str := TMemoryStream.Create;
  Ini.ReadBinaryStream(Section, Value, str);
  if str.Size=64 then str.Read(dmp[0],64);
  str.Free;
  if dmp[51]=0 then exit;

  for i:=0 to 63 do
  case i of
   00..31: M[i]:= I xor $C9;
   32..63: M[i]:= I xor $CC;
  end;

  len := dmp[51] xor $7E;
  for i:=1 to len do
  begin
    j:=-1;
    case i of
      1,3,5,6  : j:=i*7; // 7,21,35,42
      9,8,10   : j:=i*6; // 54,48,60
      2,4,7,11 : j:=i*4; // 8,16,28,44
      12..15,17..20,30 : j:=i;   //12..15,17..20
      23,25,26,28,29   : j:=i*2; //46.50.52.56.58
      16,27   : j:=i-16; //0,9
      21,22,24: j:=i-19; //2,3,5
    end;
    if J>-1 then result := result+chr(M[j] xor dmp[j]);
    if Length(result)=len then break;
  end;
end;
алгоритм можно перемутить как угодно, весь прикол в функции ReadBinaryStream которая превращает любой символ в его код в текстовом Нех виде (пробел => 32 => $20 => '20')
95% сбоев и ошибок приложений, находится в полу метрах от монитора
JUDAS вне форума Ответить с цитированием
Старый 12.08.2015, 10:19   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Judas, позвольте поинтересоваться, а зачем этот страшный ужас?
разве код (взял его в теме Парное шифрование с ключом из 15 букв):
Код:
function Crypt(text, password:String):String;
var N, i:integer;
begin
   crypt := text;
   N := 1;
   for i:=1 to length(text) do begin
      Crypt[i] := chr(ord(text[i]) xor ord(password[N]));
      inc(N);
      if N > length(password) then N := 1;
   end;
end;

var S:String;
begin
   S := Crypt('Длинная шифруемая строка текста. Помните об ограничениях String в Pascal max 255 символов.',
              'железный шпиц дома лежит');
   S := Crypt(S, 'железный шпиц дома лежит');   // расшифровать
не проще?!!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 12.08.2015, 11:53   #6
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Цитата:
Judas, позвольте поинтересоваться, а зачем этот страшный ужас?
У каждого свои методы и свои велосипеды на счет усложнения жизни сферическим ломателям этих алгоритмов в вакууме.
Человек_Борща вне форума Ответить с цитированием
Старый 12.08.2015, 13:24   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Человек_Борща, это да, согласен.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 12.08.2015, 20:36   #8
Dux
Delphi Master
Форумчанин Подтвердите свой е-майл
 
Аватар для Dux
 
Регистрация: 31.03.2008
Сообщений: 803
По умолчанию

Дело в том, что я шифровал текстовый файл следующим образом:

Код:
function cd(s:string):string;
var
i:integer;
begin
result:=s;
for i:=1 to length(result) do
if (result[i] in ['a'..'z', 'а'..'я','!'..'ї']) then
result[i]:=chr(ord(result[i])+321);
end;
Но в DelphiXE7 конструкция in для кириллицы не работает, теперь ломаю голову как реализовать такую же функцию.
Dux вне форума Ответить с цитированием
Старый 12.08.2015, 20:55   #9
Dux
Delphi Master
Форумчанин Подтвердите свой е-майл
 
Аватар для Dux
 
Регистрация: 31.03.2008
Сообщений: 803
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
мой любимый XOR однозначно поможет.
вот только чуток напрягает, зачем Вы уточняете, что ...
Программе шифрования с помощью "исключающего ИЛИ" == XOR - всё равно, какие у Вас там символы, хоть текстовый файл шифруйте, хоть MP3, хоть картинку.
один нюанс - после шифрации набор символов становится НЕПЕЧАТНЫЙ, его нельзя просто так посмотреть или, тем паче, отобразить с помощью визуальных компонентов.
Это, конечно, тоже решается (например, с помощью base64), но, с другой стороны, зачем кому-то смотреть на ШИФРОВАННЫЙ код. Очевидно, что там для стороннего зрителя просто "шум"..
А можно пример?
Dux вне форума Ответить с цитированием
Старый 12.08.2015, 21:04   #10
ДралсяСошибками
Форумчанин
 
Аватар для ДралсяСошибками
 
Регистрация: 31.05.2011
Сообщений: 301
По умолчанию

Сомневаюсь, что кто-то будет разбирать алгоритм, а не подсмотрит результат этого алгоритма
ДралсяСошибками вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Из Паскаля в СИ++. Шифрование текстового файла перестановкой desnet Помощь студентам 1 24.05.2014 09:46
Шифрование текстового файла на Delphi вася радугов Помощь студентам 5 21.11.2012 00:09
Шифрование Runner Помощь студентам 11 17.06.2010 22:17
шифрование Рахимжан Помощь студентам 5 29.11.2009 22:33
Шифрование текстового файла pomoshnic Паскаль, Turbo Pascal, PascalABC.NET 5 14.02.2009 18:21