Dosya Base64+GZip sorun
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
Dosya Base64+GZip sorun
İyi geceler. Dosya şifreleme çalışıyorum olmuyor.
Misal bir txt dosyasını base64 çeviriyorum. Çevirdiğim dosyanı GZip yapıp test.txt kayıt yapıyorum. Buraya kadar sorun yok.
test.txt dosyansını eski haline çevirmek istediğimde data error hatası alıyorum. Sorun nedir anlamıyorum.
Misal bir txt dosyasını base64 çeviriyorum. Çevirdiğim dosyanı GZip yapıp test.txt kayıt yapıyorum. Buraya kadar sorun yok.
test.txt dosyansını eski haline çevirmek istediğimde data error hatası alıyorum. Sorun nedir anlamıyorum.
Re: Dosya Base64+GZip sorun
Hata nedir bildirmemişsiniz. Bunu da ben anlayamadım
Çözüm üretmişsen de cevaplanmamış mesaj olarak görünüyor, listeden düşsün diye yazıyorum.
önce hata base64 dönüşümünde olmadığını test et. sonra da bağımsız olatak gzip hata testibyap. Her iki yakada hatasız işlem yapabildiğinde birleştirirsin.
Şöyle düşün hem nezle olabilirsin hem de migrenin vardır. Başım neden ağrıyor sorusunun cevabını ararken her iki sorunu da bağımsız irdelemelisin. Belki nezlen geçmiş sadece migren ağrısıdır ya da tersi.

Çözüm üretmişsen de cevaplanmamış mesaj olarak görünüyor, listeden düşsün diye yazıyorum.
önce hata base64 dönüşümünde olmadığını test et. sonra da bağımsız olatak gzip hata testibyap. Her iki yakada hatasız işlem yapabildiğinde birleştirirsin.
Şöyle düşün hem nezle olabilirsin hem de migrenin vardır. Başım neden ağrıyor sorusunun cevabını ararken her iki sorunu da bağımsız irdelemelisin. Belki nezlen geçmiş sadece migren ağrısıdır ya da tersi.

Re: Dosya Base64+GZip sorun
İyi akşamlar Muharrem abi. Base64 sorun yok enkod dekod çalışıyo. Sorun GZip fonksiyonu. Kütüphanem bu. Ben txt base64 yapıyom sorun yok. GZip sıkıştırmak istiyom işi bozuyo.
Kod: Tümünü seç
unit AppLib;
interface
uses
System.Classes,
ZLib,
Soap.EncdDecd,
System.NetEncoding;
type
TApp = class(TObject)
private
function StrToGZip(const Text: string): string;
function GZipToStr(const Text: string): string;
public
procedure CryptoFile(A, B: string);
procedure DecryptoFile(A, B: string);
end;
implementation
{ TApp }
function TApp.StrToGZip(const Text: string): string;
var
strInput,
strOutput: TStringStream;
Zipper: TZCompressionStream;
begin
Result:= '';
strInput:= TStringStream.Create(Text);
strOutput:= TStringStream.Create;
try
Zipper:= TZCompressionStream.Create(strOutput);
try
Zipper.CopyFrom(strInput, strInput.Size);
finally
Zipper.Free;
end;
Result:= strOutput.DataString;
finally
strInput.Free;
strOutput.Free;
end;
end;
function TApp.GZipToStr(const Text: string): string;
var
strInput,
strOutput: TStringStream;
Unzipper: TZDecompressionStream;
begin
Result:= '';
strInput:= TStringStream.Create(Text);
strOutput:= TStringStream.Create;
try
Unzipper:= TZDecompressionStream.Create(strInput);
try
strOutput.CopyFrom(Unzipper, Unzipper.Size);
finally
Unzipper.Free;
end;
Result:= strOutput.DataString;
finally
strInput.Free;
strOutput.Free;
end;
end;
procedure TApp.CryptoFile(A, B: string);
var
MS: TMemoryStream;
SL: TStringList;
B64: WideString;
begin
MS := TMemoryStream.Create;
SL := TStringList.Create;
MS.LoadFromFile(A);
try
B64 := EncodeBase64(MS.Memory, MS.Size);
//SL.Text := StrToGZip(B64); // GZip
SL.Text := B64; // Base64
SL.SaveToFile(B);
finally
MS.Free;
SL.Free;
end;
end;
procedure TApp.DecryptoFile(A, B: string);
var
SS: TStringStream;
B64: WideString;
BS: TBytesStream;
begin
SS := TStringStream.Create;
SS.LoadFromFile(A);
B64 := SS.DataString;
//BS := TBytesStream.Create(DecodeBase64(GZipToStr(B64))); // GZip
BS := TBytesStream.Create(DecodeBase64(B64)); // Base64
try
BS.SaveToFile(B);
finally
SS.Free;
BS.Free;
end;
end;
end.
Re: Dosya Base64+GZip sorun
Bunu telefondan deneme fırsatım yok, her bir fonksiyon ikilisi doğru çalışıyor mu? test ettin mi?
Crypt / Decrypt
Zip / UnZip
eğer sağlamlarsa sıralama hatası yapıyorsundur derim.
Paketlerken: Zip - Crypt
Açarken : DeCrypt - Unzip
sıralamasını kontrol etmelisin, tabi dediğim gibi fonksiyonların sağlıklıysa.
Crypt / Decrypt
Zip / UnZip
eğer sağlamlarsa sıralama hatası yapıyorsundur derim.
Paketlerken: Zip - Crypt
Açarken : DeCrypt - Unzip
sıralamasını kontrol etmelisin, tabi dediğim gibi fonksiyonların sağlıklıysa.
Re: Dosya Base64+GZip sorun
İyi geceler. Evet ayrılıkta sorun yok bir arada sorun var.
Re: Dosya Base64+GZip sorun
Kodlarını inceledim.
şeklinde kurarsan çalışıyor ancak senin GZIP olayında sorun var.
içeren bir a.txt dosyasını Encrypt / Decrypt ettiğine sonuç oluyor. İçinde unicode harf bile yok.. Çok güvenilir değil bilgine...
NOT: Base64 kısmı doğru çalışıyor.
Kod: Tümünü seç
procedure TApp.DecryptoFile(A, B: string);
var
SS : TStringStream;
B64: WideString;
BS : TBytesStream;
begin
SS := TStringStream.Create;
SS.LoadFromFile(A);
B64 := GZipToStr( SS.DataString );
BS := TBytesStream.Create(DecodeBase64(B64));
try
BS.SaveToFile(B);
finally
SS.Free;
BS.Free;
end;
end;
Kod: Tümünü seç
Muharrem ARMAN
Kod: Tümünü seç
MuharrEm ARMAN
NOT: Base64 kısmı doğru çalışıyor.
Kod: Tümünü seç
Muharrem ARMAN için ürettiği kod TXVoYXJyZW0gQVJNQU4=
Re: Dosya Base64+GZip sorun
Merhaba. GZip sıkıştıra için istiyordum. Amma nedense sorun çıkarıyo. Ben aslında Muharrem abi bu bileşenim için istiyorum. Güvenliğe kafam takıldı. Dedim biraz sıkıştırma yaparsam post yakalasa bile uğraşır çözmeye. SSL baktım her kullanıcı kendi serverinde para ile alıp kurlamlı. SSH ise oda 2 taraflı kurulmalı. Bu indy destek vermediğinden işimi zorlaştırdı. Bende bi yol arıyom acaba nasıl bi istem olsa güvenlik için.
Re: Dosya Base64+GZip sorun
Sana istediğin Class'ı çalışır şekilde iki opsiyonlu olarak yazdım.
Veriyi diske fiziksel olarak yazmak istemezsen, bunu MemoryStream üzerinden yürüteceğin EncryptStream/DecryptStream ikilisi ile herhangi bir fiziksel dosya üzerinden yürütebileceğin EncryptFile/ DecryptFile ikilisini hazırladım.
Fiziksel bir dosyadan Kullanımı :
MemoryStream üzerinden kullanımı zaten Class içinde de yer alıyor.
Veriyi diske fiziksel olarak yazmak istemezsen, bunu MemoryStream üzerinden yürüteceğin EncryptStream/DecryptStream ikilisi ile herhangi bir fiziksel dosya üzerinden yürütebileceğin EncryptFile/ DecryptFile ikilisini hazırladım.
Fiziksel bir dosyadan Kullanımı :
Kod: Tümünü seç
procedure TForm1.BitBtn3Click(Sender: TObject);
Var
a : TApp;
strKaynak, strHedef : TFileName;
begin
strKaynak := ExtractFilePath(Application.Exename) + 'a.txt';
strHedef := ExtractFilePath(Application.Exename) + 'a.enc';
a := TApp.Create;
Try
a.EncryptFile( strKaynak, strHedef );
Finally
a.Free;
End;
end;
procedure TForm1.BitBtn4Click(Sender: TObject);
Var
a : TApp;
strKaynak, strHedef : TFileName;
begin
strKaynak := ExtractFilePath(Application.Exename) + 'a.enc';
strHedef := ExtractFilePath(Application.Exename) + 'b.txt';
a := TApp.Create;
Try
a.DecryptFile( strKaynak, strHedef );
Finally
a.Free;
End;
end;
Kod: Tümünü seç
Var
MSKaynak, MSHedef : TMemoryStream;
begin
MSKaynak := TMemoryStream.Create;
MSHedef := TMemoryStream.Create;
MSKaynak.LoadFromFile( strKaynak );
EncryptStream( MSKaynak, MSHedef );
MSHedef.SaveToFile( strHedef );
Kod: Tümünü seç
unit AppLib;
interface
uses
Classes,
SysUtils,
ZLib,
EncdDecd;
type
TApp = class(TObject)
private
public
procedure EncryptStream(MSKaynak, MSHedef: TMemoryStream);
procedure DecryptStream(MSKaynak, MSHedef: TMemoryStream);
procedure EncryptFile(strKaynak, strHedef: TFileName);
procedure DecryptFile(strKaynak, strHedef: TFileName);
end;
implementation
{ TApp }
procedure TApp.EncryptStream( MSKaynak, MSHedef : TMemoryStream );
Var
SS : TStringStream;
MS : TMemoryStream;
CS : TCompressionStream;
begin
SS := TStringStream.Create('');
try
EncdDecd.EncodeStream(MSKaynak, SS); // Uses EncdDecd eklenecek...
MS := TMemoryStream.Create;
try
MS.Position := 0;
MS.LoadFromStream( SS );
CS := TCompressionStream.Create( clDefault, MSHedef );
try
CS.CopyFrom( MS, 0 );
finally
CS.Free;
end;
finally
MS.Free;
end;
finally
SS.Free;
end;
end;
procedure TApp.DecryptStream( MSKaynak, MSHedef : TMemoryStream );
Var
SS : TStringStream;
MS : TMemoryStream;
DS : TDecompressionStream;
Buffer : Array[0..4095] of Char;
BufLen : Integer;
begin
DS := TDecompressionStream.Create( MSKaynak );
Try
MS := TMemoryStream.Create;
MS.Position := 0;
BufLen := DS.Read(Buffer,SizeOf(Buffer));
while BufLen > 0 do
begin
MS.Write(Buffer, BufLen);
BufLen := DS.Read(Buffer,SizeOf(Buffer));
end;
Finally
DS.Free;
End;
SS := TStringStream.Create('');
try
MS.Position := 0;
EncdDecd.DecodeStream(MS, SS); // Uses EncdDecd eklenecek...
MSHedef.LoadFromStream( SS );
finally
SS.Free;
end;
end;
procedure TApp.EncryptFile(strKaynak, strHedef: TFileName);
Var
MSKaynak, MSHedef : TMemoryStream;
begin
MSKaynak := TMemoryStream.Create;
MSHedef := TMemoryStream.Create;
MSKaynak.LoadFromFile( strKaynak );
EncryptStream( MSKaynak, MSHedef );
MSHedef.SaveToFile( strHedef );
end;
procedure TApp.DecryptFile(strKaynak, strHedef: TFileName);
Var
MSKaynak, MSHedef : TMemoryStream;
begin
MSKaynak := TMemoryStream.Create;
MSHedef := TMemoryStream.Create;
MSKaynak.LoadFromFile( strKaynak );
DecryptStream( MSKaynak, MSHedef );
MSHedef.SaveToFile( strHedef );
end;
end.
Re: Dosya Base64+GZip sorun
Merhaba Muharrem abi. Peki bu php tarafı nasıl enkod dekod edecek? Asıl amacım güvenlik ve bilgi sıkıştırlıması ki çok az traffik yesin.
Re: Dosya Base64+GZip sorun
Hocam PHP yakasını biliyor olman lazım. Bunu bize sormasan... Delphi forumu ya o bakımdan...
Ben biliyorum da buradan yazmak foruma uygun olur mu ? Bu linkten incele sorunu cevabı var...
Ben biliyorum da buradan yazmak foruma uygun olur mu ? Bu linkten incele sorunu cevabı var...
Re: Dosya Base64+GZip sorun
Anladım. Teşekkürler abi. Bir inceleyim onu.