Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Шифровщик, memo1 и memo2 
:(
    Опции темы
vovan430
  Дата 29.10.2005, 13:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 70
Регистрация: 13.8.2005
Где: Иркутская обл. г. Тайшет

Репутация: нет
Всего: нет



Помогите мне написать программу которая шифрует слова введённые в memo1 на какие ни будь закарючки и обратно из закарючек в нормальный текст
ввод в memo1 вывод B Memo2

Это сообщение отредактировал(а) vovan430 - 29.10.2005, 13:20
PM MAIL WWW   Вверх
MFSham
Дата 29.10.2005, 14:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 220
Регистрация: 28.8.2005
Где: Беларусь, Гродно

Репутация: 1
Всего: 3



Создаешь какое-либо множесво, в котором каждому символу ставишь в соответствие какую-нибудь закорючку. Расшифровывается просто в обратном порядке.
Один из самых простых способов шифрования - сдвиг на определенное кол-во букв по алфавиту относительно текущей. Например устанавливаешь сдвиг = 5, и получаешь, что А=Д, Б=Е и т.д.
Знаки препинания можешь просто заманить на закарючки. Надеюсь смысл понятен.
--------------------
Без ветра трава неподвижна. Без программ компьютеры бесполезны.
PM MAIL   Вверх
ne0n
Дата 29.10.2005, 15:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


PlayBoy
**


Профиль
Группа: Участник
Сообщений: 733
Регистрация: 5.8.2005
Где: Н.Новгород

Репутация: 1
Всего: 11



Вот простой примерчик шифрования и дешифрования текста:

Код

procedure TForm1.Button1Click(Sender: TObject);
 var
   s: String[255];
   c: array[0..255] of Byte absolute s;
   i: Integer;
 begin
   {Для шифровки}

   s := 'Мега пупер супер секретный текст';
   for i := 1 to Ord(s[0]) do c[i] := 23 xor c[i];
   Label1.Caption := s;

   {Дешифруем}

   s := Label1.Caption;
   for i := 1 to Length(s) do s[i] := Char(23 xor Ord(c[i]));
   Label2.Caption := s;
 end;


p.s. для Memo придется чуть чуть переделать!
PM MAIL ICQ   Вверх
vovan430
Дата 29.10.2005, 15:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 70
Регистрация: 13.8.2005
Где: Иркутская обл. г. Тайшет

Репутация: нет
Всего: нет



а точнее как для memo
Добавлено @ 15:51
Цитата(MFSham @ 29.10.2005, 14:07)
Один из самых простых способов шифрования - сдвиг на определенное кол-во букв по алфавиту относительно текущей. Например устанавливаешь сдвиг = 5, и получаешь, что А=Д, Б=Е и т.д.
Знаки препинания можешь просто заманить на закарючки. Надеюсь смысл понятен.

Понятен смысл, но такой способ у меня уже есть надо другой.
PM MAIL WWW   Вверх
Prof_2000
Дата 29.10.2005, 19:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 121
Регистрация: 26.3.2005
Где: Харьков, Украина

Репутация: 1
Всего: 1



Могу предложить гениальный вариант! Сам случайно напоролся. Если сохранить string в файл при помощи TMemoryStream, то оно его так закодирует, что раскодировать само не сможет. Зато его можно будет раскодировать при помощи команды ReadFile. Почему работает, не знаю, но работает. А пишется легко.
--------------------
Pereant qui ante nos nostra dixerunt! (лат.)      Да погибнут те, кто раньше нас высказал наши мысли!   
PM MAIL WWW ICQ   Вверх
MFSham
Дата 30.10.2005, 00:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 220
Регистрация: 28.8.2005
Где: Беларусь, Гродно

Репутация: 1
Всего: 3



Цитата(ne0n @ 29.10.2005, 15:32)
Вот простой примерчик шифрования и дешифрования текста

По моему такой вариант для Memo1 неприемлим. Получается тебе для каждой строки надо будет хранить отдельный массив. А если строк в Memo1 1000, то тебе придется хранить 1000 массивов для того, чтобы это все потом расшифровать. А для шифровки одной строки предложенный способ естестно прокатит.
Тут быстрее будет написать некий алгоритм распознавания и дешифровки текста из Memo2, основываясь на том, какой был выбран метод шифрования.

Цитата(vovan430 @ 29.10.2005, 15:46)
Понятен смысл, но такой способ у меня уже есть надо другой.

Придумай!!! smile Почему не использовать способ предложенный Prof 2000. Это ведь тоже один из вариантов. Как говорил наш препод по матану - решение надо придумать, приснить, взять с потолка и т.д. smile

Это сообщение отредактировал(а) MFSham - 30.10.2005, 11:04
--------------------
Без ветра трава неподвижна. Без программ компьютеры бесполезны.
PM MAIL   Вверх
Самурай
Дата 30.10.2005, 09:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 64
Регистрация: 20.10.2005
Где: Воронежская облас ть > Семилуки

Репутация: 1
Всего: 1



А если нам определить обычный массив от 0 до 255 с произвольным расположением символов в нем из таблицы кодов без их повторнений? Тога мы можем легко кодировать и раскодировать текст, при этом секретность нормальная, если применить в добавок еще и простой xor и сменить кодировку у текста. Все это пишется в пару строк. smile
PM MAIL ICQ   Вверх
Albinos_x
Дата 30.10.2005, 11:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

Репутация: 26
Всего: 108



вот пример:
Код

type
   TListCript = array of byte;
....
implementation

{$R *.dfm}

procedure TForm6.SpeedButton1Click(Sender: TObject);
var list:Text;
    LC:TListCript;
    i, len :word;
    OsCt:byte;
    fc:file of byte;
    s:string;
    ListCript: TStringList;
begin
if not SaveDialog1.Execute then
   begin
   MessageDlg('Не выбран файл.Операция остановлена.',mtError,[mbOK],0);
   Exit;
   end;
ListCript:=TStringList.Create;
ListCript.Clear;
ListCript:=Memo1.Lines;
list:=ListCript.Text;
len:=Length(List)-1;
SetLength(LC,len+1);
for i:=0 to (len) do
    begin
    OsCt:=(ord(list[len+1-i])-i+len) mod 256;
    LC[i]:=OsCt;
    end;
s:=SaveDialog1.FileName+'.dat';
AssignFile(fc,s);
Rewrite(fc);
for i:=0 to len do
   Write(fc,LC[i]);
Closefile(fc);
end;


здесь текст шифруется и записывается в файл. Выбран именно такой вариант, потому что работаю с TStringList, при зашифровке может получится символ #13, после него все символы в строке (String) теряются, что делает невозможным корректную расшифровку. Если поэкспериментировать с переменными типа Техt и зашифровку производить не по строкам, а по символьно, то может и получится преобразовать в нормальный текст, поддающийся расшифровке.


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
RideX
Дата 30.10.2005, 20:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 94
Регистрация: 8.9.2004

Репутация: 4
Всего: 7



Base64 гарантирует набор только из ANSI символов smile
Код

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls;

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Memo2: TMemo;
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

function Base64Encode(const strPlain: String): String;
  function EncodeByte(b: BYTE): Char;
  const
    Base64Table: String[64] =
      'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
  begin
    Result := Base64Table[(b and $3F) + 1];
  end;
var
  i: Integer;
begin
  i := 1;
  Result := '';
  while i <= Length(strPlain) do begin
    Result := Result + EncodeByte(BYTE(strPlain[i]) shr 2);
    Result := Result + EncodeByte((BYTE(strPlain[i]) shl 4) or (BYTE(strPlain[i+1]) shr 4));
    if i+1 <= Length(strPlain) then
      Result := Result + EncodeByte((BYTE(strPlain[i+1]) shl 2) or (BYTE(strPlain[i+2]) shr 6))
    else
      Result := Result + '=';
    if i+2 <= Length(strPlain) then
      Result := Result + EncodeByte(BYTE(strPlain[i+2]))
    else
      Result := Result + '=';
    Inc(i, 3);
  end;
end;

function Base64Decode(const strCoded: String): String;
const
  RESULT_ERROR = -2;
var
  c: Char;
  x: SmallInt;
  W: WORD;
  StoredW: array[0..3] of SmallInt;
  strCodedIndex: Integer;
  strCodedLength: Integer;
begin
  Result := '';
  strCodedIndex := 1;
  W := 0;
  strCodedLength := Length(strCoded);
  while strCodedIndex <= strCodedLength do begin
    while (strCodedIndex <= strCodedLength) and (W < 4) do begin
      c := strCoded[strCodedIndex];
      case c of
        '+'     : x := 62;
        '/'     : x := 63;
        '0'..'9': x := Ord(c) - (Ord('0') - 52);
        '='     : x := -1;
        'A'..'Z': x := Ord(c) - Ord('A');
        'a'..'z': x := Ord(c) - (Ord('a') - 26);
      else
        x := RESULT_ERROR;
      end;
      if x <> RESULT_ERROR then begin
        StoredW[W] := x;
        Inc(W);
      end;
      Inc(strCodedIndex);
    end;
    if W = 4 then begin
      W := 0;
      Result := Result + Char((StoredW[0] shl 2) or (StoredW[1] shr 4));
      if StoredW[2] = -1 then Exit;
      Result := Result + Char((StoredW[1] shl 4) or (StoredW[2] shr 2));
      if StoredW[3] = -1 then Exit;
      Result := Result + Char((StoredW[2] shl 6) or (StoredW[3]));
    end;
  end;
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
  Memo2.Text := Base64Encode(Memo1.Text);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  Memo1.Text := Base64Decode(Memo2.Text);
end;

end.

PM   Вверх
Albinos_x
Дата 30.10.2005, 23:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

Репутация: 26
Всего: 108



Цитата(RideX @ 30.10.2005, 20:26)
Base64 гарантирует набор только из ANSI символов

ну можно немножко подделать и будет ещё с русским алфовитом работать... smile


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
Stolzen
Дата 31.10.2005, 08:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1041
Регистрация: 17.10.2005

Репутация: нет
Всего: 48





--------------------
datatalks.ru - анализ данных, статистика, машинное обучение
PM MAIL WWW   Вверх
RideX
Дата 1.11.2005, 19:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 94
Регистрация: 8.9.2004

Репутация: 4
Всего: 7



Цитата(Albinos_x @ 31.10.2005, 02:38)
можно немножко подделать и будет ещё с русским алфовитом работать

Ещё немножно - будет и с арабским smile Здесь имеется ввиду, что в выходном тексте не будет непечатных символов, Esc-последовательностей, типа $0x
PM   Вверх
Rome
Дата 3.11.2005, 17:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 3.11.2005

Репутация: нет
Всего: нет



vovan430
Для кодирования используй компонент TIdBase64Encoder, а для декодирования TIdBase64Decoder из панели Indy Misс.
А также есть компоненты(TIdCoderMD2, TIdCoderMD4, TIdCoderMD5) для шифрования по стандартам RSA-MD2/4/5.

Лично я использую для кодирования и декодирования компонент TIdBase64Encoder и декодирование TIdBase64Decoder.

smile На мой взгляд, не стоить изобретать свой велосипед, он уже есть! Всё равно лучшего не сделаешь! smile

Удачи smile
PM MAIL ICQ   Вверх
newalex
Дата 16.11.2005, 01:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 92
Регистрация: 15.11.2005

Репутация: нет
Всего: нет



Простейший xor, эту же функцию для расшифрования используй...

Код

  function EncryptData(Data : PChar;
                       DataSize: LongInt;
                       Key : PChar;
                       KeySize : Integer): boolean; stdcall;
  var
    I : longint;
  begin
    For i := 0 to DataSize - 1 do
        Data[i] := Char(Byte(Data[i]) xor Byte(Key[i mod KeySize]));
    Result := true;
  end;

Использование:
  OurText := StrNew(Memo1.Lines.GetText);

  EncryptData( OurText, Length(OurText), 'testkey', 7);


Это сообщение отредактировал(а) Girder - 16.11.2005, 13:26
PM MAIL   Вверх
Addmin
Дата 20.3.2006, 11:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 803
Регистрация: 3.2.2006
Где: сослан в Сибирь

Репутация: нет
Всего: 15



Полиалфавитный шифр Вигинера - мощная вещь! Шифрует по введённом слову, и как шифрует! Не то что закорючки - верхний и нижний индекс и прочие непечатаемые знаки в деле! И кода - всего ничего:
Код

function VigenerCoDec(Input, Key: pchar): pchar
var
  i, j: integer;
  tmps, text: string;
begin
  text := Input;
  for i := 1 to length(text) do
  begin
    if i > length(key) then
      j := i mod length(key)
    else
      j := i;
    tmps := tmps + chr((ord(text[i])) xor (ord(key[j])));
  end;
  result := pchar(tmps);
end;
 


Пример:
Код


Text := PChar(edit1.text);
K := PChar(edit2.text);
Edit3.text := VigenerCoDec(Text, K);

Добавлено @ 11:34
Да, а дешифрация - точно также проходит.
Добавлено @ 11:36
Да, и ещё немного - ключевое слово может быть как русским, так и английским(китайским, японским...) и не просто слово - предложение. Шифрует любой текст (на любом языке).


--------------------
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0621 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.