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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Шифрование данных, И простого текста 
:(
    Опции темы
JohnnY
Дата 21.3.2007, 23:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Немогли бы вы подсказать код шифрования данных (текста), который мало того чтобы кодировал текст, но и ещё мог его сжимать, т.е. чтобы зашифрованный текст весил меньше чем исходный (незашифрованный)...

Я видел Base64 шифрование и UUE шифрование, но они кодируют текст, но добавляют в него что-то...
PM MAIL WWW   Вверх
VICTAR
Дата 21.3.2007, 23:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Посмотри ссылки внизу страницы, может там чего найдешь

Добавлено @ 23:54 
А может тебе сначала сжать тескт, а потом зашифровать? 
PM MAIL   Вверх
JohnnY
Дата 21.3.2007, 23:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



VICTAR, ссылки внизу страницы непомогли... 
Цитата(VICTAR @  21.3.2007,  23:52 Найти цитируемый пост)
А может тебе сначала сжать тескт, а потом зашифровать? 


А как текст сжать то?
Подскажи кодик, Please...


Это сообщение отредактировал(а) JohnnY - 22.3.2007, 00:00
PM MAIL WWW   Вверх
VICTAR
Дата 22.3.2007, 00:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Тебе поможет ZLIB, поставляется вместе с делфи начиная с 7 версии. Примеры есть в drkb и на форуме.
PM MAIL   Вверх
aktuba
Дата 22.3.2007, 00:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Смышленный
***


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

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



Цитата

т.е. чтобы зашифрованный текст весил меньше чем исходный (незашифрованный)...


Ты определись, что тебе надо, шифрование или архивация. Это разные вещи по своей сути!
Логичнее было-бы сначала шифровать, а потом архивировать.
Для шифрования есть готовые модули в DRKB, я, например, использую RC6.
А для архивации используй ZLib, как и предложил VICTAR... 


--------------------
user posted image
PM MAIL WWW Skype   Вверх
JohnnY
Дата 22.3.2007, 02:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Подскажите как пользоваться этим ZLib....
Я добавил в uses zlib, а дальше то что?

Раскажите поподробней как им запаковать, текст например из memo2 и сохранить в файл...

И как распаковывать...
PM MAIL WWW   Вверх
VICTAR
Дата 22.3.2007, 03:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Поиском и drkb упорно не хотим пользоваться  smile 

Присоединённый файл ( Кол-во скачиваний: 29 )
Присоединённый файл  Zlib.rar 3,94 Kb
PM MAIL   Вверх
dumb
Дата 22.3.2007, 03:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

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



Цитата(aktuba @  22.3.2007,  00:56 Найти цитируемый пост)
Логичнее было-бы сначала шифровать, а потом архивировать.

нет тут логики. после шифровки(нормальной) можно уже не тужиться что-то сжимать... smile
PM MAIL   Вверх
aktuba
Дата 22.3.2007, 04:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Смышленный
***


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

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



Цитата

нет тут логики. после шифровки(нормальной) можно уже не тужиться что-то сжимать...


С чего это ты решил???


--------------------
user posted image
PM MAIL WWW Skype   Вверх
dumb
Дата 22.3.2007, 04:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

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



шифрование(как и архивация) сильно(зависит от качества алгоритма) уменьшают избыточность информации.
PM MAIL   Вверх
aktuba
Дата 22.3.2007, 05:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Смышленный
***


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

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



Цитата

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


Ничего не путаешь??? С каких пор ШИФРОВАНИЕ уменьшает избыточность информации? Архивация - да, а шифрование - нет. Задача шифрования - спрятать открытую инфу, при этом чаще всего объем зашифрованного равен исходному объему. Ты путаешь архивацию (сжатие) с шифрованием, что не верно в корне...


--------------------
user posted image
PM MAIL WWW Skype   Вверх
Alexeis
Дата 22.3.2007, 13:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

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



Цитата(aktuba @  22.3.2007,  05:42 Найти цитируемый пост)
Ничего не путаешь??? С каких пор ШИФРОВАНИЕ уменьшает избыточность информации? Архивация - да, а шифрование - нет. Задача шифрования - спрятать открытую инфу, при этом чаще всего объем зашифрованного равен исходному объему. Ты путаешь архивацию (сжатие) с шифрованием, что не верно в корне... 


  Совсем нет. Если вероятность какой либо последовательности выше чем вероятность другой последовательности, а взломщику известна тема, то можно провести статистику и определить наиболее вероятные слова. И попытаться поставить соответствие этих последовательностей и слов. А если еще и известен алгоритм шифрования, что несложно определить, так вообще задача упрощается. Потому хороший алгоритм шифрования должен  уменьшать избыточность до предела. Например, абсолютно стойкий ключ XOR со случайными числами после шифрования дает такой файл, что его ни какой архиватор не берет. Одной из проблем шифрования как раз и является поиск равномерно случайных чисел, потому как любая закономерность или отклонение от равномерной случайности приводит ослаблению надежности шифра. 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
JohnnY
Дата 22.3.2007, 22:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



VICTAR, и в очередной раз ты мне помогаешь...
Спасибо большое за код... Очень благодарен...
PM MAIL WWW   Вверх
VICTAR
Дата 22.3.2007, 22:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



JohnnY,  да не за что  smile 
PM MAIL   Вверх
JohnnY
Дата 24.3.2007, 00:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



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

Вот код программы:
Код

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Memo2: TMemo;
    Memo3: TMemo;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    Button5: TButton;
    Button6: TButton;
    OpenDialog1: TOpenDialog;
    SaveDialog1: TSaveDialog;
    Memo4: TMemo;
    Memo5: TMemo;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button6Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure ComressStream( aSource, aTarget : TStream; compressionRate : TCompressionLevel);
var comprStream : TCompressionStream;
// compression level : (clNone, clFastest, clDefault, clMax)
begin
  comprStream := TCompressionStream.Create( compressionRate, aTarget );
try
  comprStream.CopyFrom( aSource, aSource.Size );
  comprStream.CompressionRate;
finally
  comprStream.Free;
end;
end;

procedure DecompressStream(inpStream, outStream: TStream);
var
  InpBuf, OutBuf: Pointer;
  OutBytes, sz: Integer;
begin
  InpBuf := nil;
  OutBuf := nil;
  sz := inpStream.Size - inpStream.Position;
  if sz > 0 then
  try
    GetMem(InpBuf, sz);
    InpStream.Read(InpBuf^, sz);
    DecompressBuf(InpBuf, sz, 0, OutBuf, OutBytes);
    outStream.Write(OutBuf^, OutBytes);
  finally
    if InpBuf <> nil then FreeMem(InpBuf);
    if OutBuf <> nil then FreeMem(OutBuf);
  end;
end;

type TAByte = array [0..maxInt-1] of byte; 
type TPAByte = ^TAByte;

function Encode(data:string) : string; overload;
const b64 : array [0..63] of char = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
var ic,len : integer;
pi, po : TPAByte; 
c1 : dword;
begin 
len:=length(data); 
if len > 0 then begin 
SetLength(result, ((len + 2) div 3) * 4); 
pi := pointer(data); 
po := pointer(result); 
for ic := 1 to len div 3 do begin 
c1 := pi^[0] shl 16 + pi^[1] shl 8 + pi^[2]; 
po^[0] := byte(b64[(c1 shr 18) and $3f]); 
po^[1] := byte(b64[(c1 shr 12) and $3f]); 
po^[2] := byte(b64[(c1 shr 6) and $3f]); 
po^[3] := byte(b64[(c1 ) and $3f]); 
inc(dword(po), 4); 
inc(dword(pi), 3); 
end; 
case len mod 3 of 
1 : begin 
c1 := pi^[0] shl 16; 
po^[0] := byte(b64[(c1 shr 18) and $3f]); 
po^[1] := byte(b64[(c1 shr 12) and $3f]); 
po^[2] := byte('='); 
po^[3] := byte('='); 
end; 
2 : begin 
c1 := pi^[0] shl 16 + pi^[1] shl 8; 
po^[0] := byte(b64[(c1 shr 18) and $3f]); 
po^[1] := byte(b64[(c1 shr 12) and $3f]); 
po^[2] := byte(b64[(c1 shr 6) and $3f]); 
po^[3] := byte('='); 
end; 
end; 
end else 
result := ''; 
end; 

function Decode(data:string) : string; overload; 
var i1,i2,len : integer; 
pi, po : TPAByte; 
ch1 : char; 
c1 : dword; 
begin 
len:=length(data); 
if (len > 0) and (len mod 4 = 0) then begin 
len := len shr 2; 
SetLength(result, len * 3); 
pi := pointer(data); 
po := pointer(result); 
for i1 := 1 to len do begin 
c1 := 0; 
i2 := 0; 
while true do begin 
ch1 := char(pi^[i2]); 
case ch1 of
'A'..'Z' : c1 := c1 or (dword(ch1) - byte('A') ); 
'a'..'z' : c1 := c1 or (dword(ch1) - byte('a') + 26); 
'0'..'9' : c1 := c1 or (dword(ch1) - byte('0') + 52); 
'+' : c1 := c1 or 62; 
'/' : c1 := c1 or 63; 
else begin
if i2 = 3 then begin 
po^[0] := c1 shr 16; 
po^[1] := byte(c1 shr 8); 
SetLength(result, Length(result) - 1); 
end else begin 
po^[0] := c1 shr 10; 
SetLength(result, Length(result) - 2); 
end; 
exit; 
end; 
end; 
if i2 = 3 then 
break; 
inc(i2); 
c1 := c1 shl 6; 
end; 
po^[0] := c1 shr 16; 
po^[1] := byte(c1 shr 8); 
po^[2] := byte(c1); 
inc(dword(pi), 4); 
inc(dword(po), 3); 
end; 
end else 
result := ''; 
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
if form1.OpenDialog1.Execute then
begin
form1.Memo1.Lines.LoadFromFile(form1.OpenDialog1.FileName);
end;
end;

procedure TForm1.Button2Click(Sender: TObject);
var a,b:string;
begin
a:=form1.memo1.Lines.Text;
b:=Encode(a);
form1.memo2.Lines.Text:=b;
end;

procedure TForm1.Button6Click(Sender: TObject);
begin
if form1.SaveDialog1.Execute then
begin
form1.memo5.Lines.SaveToFile(form1.SaveDialog1.FileName);
end;
end;

procedure TForm1.Button3Click(Sender: TObject);
var InStr, OutStr: TMemoryStream;
begin
  InStr:=TMemoryStream.Create;
  OutStr:=TMemoryStream.Create;
  try
    InStr.Write(Memo2.Text[1], length(Memo2.Text));
    InStr.Position:=0;
    ComressStream(InStr, OutStr, clMax);
    OutStr.Position:=0;
    Memo3.Lines.LoadFromStream(OutStr);
    InStr.Position:=0;
    OutStr.Position:=0;
  finally
    InStr.Free;
    OutStr.Free;
  end;
end;

procedure TForm1.Button4Click(Sender: TObject);
var InStr, OutStr: TMemoryStream;
begin
InStr:=TMemoryStream.Create;
OutStr:=TMemoryStream.Create;
try
InStr.Write(Memo3.Text[1], length(Memo3.Text));
InStr.Position:=0;
DecompressStream(InStr, OutStr);
OutStr.Position:=0;
Memo4.Lines.LoadFromStream(OutStr);
InStr.Position:=0;
OutStr.Position:=0;
finally
InStr.Free;
OutStr.Free;
end;
end;

procedure TForm1.Button5Click(Sender: TObject);
var a,b:string;
begin
a:=form1.memo4.Lines.Text;
b:=decode(a);
form1.memo5.Lines.Text:=b;
end;

end.


При нажатии на первую кнопку - я открываю текстовый файл
При нажатии на второю - он кодируется
На третью - упаковывается ZLib'om
Четвертую - !!!Должен распаковываться!!!
Далее Декодируется
И в конце сохраняется в файл...

Вот в чём проглема!
Проблема при нажатии на четвёртую кнопку когда закодированный и упакованный текст должен распаковаться...

При нажатии на 4-ю кнопку Высвечивается сообщение: Invalid pointer operation
И ссылается сначало на строку в коде:
Код

outStream.Write(OutBuf^, OutBytes);

Это в процедуре
Код

procedure DecompressStream(inpStream, outStream: TStream);

А потом на:
Код

OutStr.Position:=0;

Находиться в процедуре:
Код

procedure TForm1.Button4Click(Sender: TObject);


А когда у меня все в одной процедуре т.е. когда жму одну кнопку у меня кодируется текст,упаковывается, распаковывается, и декодируется, то всё отлично - никаких ошибок...

А когда упаковка и распаковка в разных процедурах происходит что-то  непонятное...
При компиляции никаких ошибок невыдаёт...
Подскажите пожалуйста, может я что-то упустил? 
PM MAIL WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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