Avatar billede michael-schou Novice
27. april 2001 - 08:59 Der er 6 kommentarer og
1 løsning

Krypter/Decrypter En Stor Txt Fil

Jeg har en tekst fil som bliver indsat i en memobox, er der nogen der har en kode til at kryptere/dekrypter en tekst fil i en memobox også selvom at tekst filen er over 255 tegn?

På forhånd tak :)
Avatar billede borrisholt Novice
27. april 2001 - 09:37 #1
en form to Knaper og et memofelt og prøv så det her :

const Filename =\'Hest.txt\';

procedure  FastCrypt(ptrBuffer : Pointer; iSize : Integer; uiInit : Byte = $00);
var
  iIdx      : Integer;
  uiCurrByte : Integer;
  uiLastByte : Integer;
begin
  uiLastByte := 0;

  for iIdx := 1 to iSize do
  begin
    uiCurrByte := Byte(ptrBuffer^);
    uiCurrByte := uiCurrByte xor uiLastByte;
    uiCurrByte := not uiCurrByte;
    uiCurrByte := uiCurrByte xor uiInit;
    uiCurrByte := ((uiCurrByte and $0F) shl 4) or ((uiCurrByte and $F0) shr 4);
    uiLastByte := uiCurrByte;
    Char(ptrBuffer^) := Char(uiCurrByte);
    inc(pChar(ptrBuffer));
  end;
end;

procedure FastDeCrypt(ptrBuffer : Pointer; iSize : Integer; uiInit : Byte = $00);
var
  iIdx      : Integer;
  uiCurrByte : Byte;
  uiLastByte : Byte;
begin
  uiLastByte := 0;
  for iIdx := 1 to iSize do
  begin
    uiCurrByte := Byte(ptrBuffer^);
    uiCurrByte := ((uiCurrByte and $0F) shl 4) or ((uiCurrByte and $F0) shr 4);
    uiCurrByte := uiCurrByte xor uiInit;
    uiCurrByte := not uiCurrByte;
    uiCurrByte := uiCurrByte xor uiLastByte;
    uiLastByte := Byte(ptrBuffer^);
    Char(ptrBuffer^) := char(uiCurrByte);
    inc(pChar(ptrBuffer));
  end;
end;

procedure TForm1.ButtonLoadClick(Sender: TObject);
var
  Buffer : String;
  MemoryStream : TMemoryStream;
  Len : Integer;
begin
  if not FileExists(Filename) then
    exit;

  MemoryStream := TMemoryStream.Create;
  MemoryStream.LoadFromFile(Filename);
  MemoryStream.Read(Len,sizeOf(Integer));
  MemoryStream.Read(Buffer,Len);
  FastDecrypt(Pchar(Buffer),Len);
  Memo1.Text := Buffer;
  MemoryStream.Free;
end;

procedure TForm1.ButtonSaveClick(Sender: TObject);
var
  Buffer : String;
  MemoryStream : TMemoryStream;
  Len : Integer;
begin
  MemoryStream := TMemoryStream.Create;
  Buffer := Memo1.Text;
  Len := Length(Buffer);
  FastCrypt(PChar(Buffer), Len);
  MemoryStream.Position := 0;
  MemoryStream.Write(Len,SizeOf(integer));
  MemoryStream.Write(Buffer,Len);
  MemoryStream.SaveToFile(Filename);
  MemoryStream.Free;
end;

Jens B (http://www.fotx.net/borrisholt)
Avatar billede martinlind Nybegynder
27. april 2001 - 09:39 #2
Memo1.Lines.Text er lig med hele din streng i memoen med cr+lf så du kan køre din kryp/dekrypt på den streng.

/Martin
Avatar billede borrisholt Novice
27. april 2001 - 09:47 #3
martinlind >> Hvis du ikke kopiere din streng inden du krypterer den så kommer det krypterede text frem i dit memo felt når du har gemt det ....

Jens B
Avatar billede michael-schou Novice
28. april 2001 - 18:01 #4
Det er besværligt at få til at virke borrisholt!

Michael
Avatar billede torbenkoch Nybegynder
29. april 2001 - 00:00 #5
Har du nogle specielle ønsker til, hvordan teksten skal krypteres? Skal den bare sikres mod \"casual snooping\" eller skal det være \"rigtig\" sikkerhed?
Avatar billede borrisholt Novice
29. april 2001 - 10:12 #6
jammen så må vi jo pakke den ind i en klasse til dig :

Lav et nyt projekt og tilføj den følgende unit :

unit Unit2;

interface

uses
  Classes,  Sysutils;

type
  TCryptoTextFile = class(TStringList)
  private
    procedure  FastCrypt(ptrBuffer : Pointer; iSize : Integer; uiInit : Byte = $00);
    procedure FastDeCrypt(ptrBuffer : Pointer; iSize : Integer; uiInit : Byte = $00);
  public
    Procedure LoadFromFile(const FileName: string); override;
    procedure SaveToFile(const FileName: string); override;
  end;

implementation

{ TCryptoTextFile }

procedure TCryptoTextFile.FastCrypt(ptrBuffer: Pointer; iSize: Integer; uiInit: Byte);
var
  iIdx      : Integer;
  uiCurrByte : Integer;
  uiLastByte : Integer;
begin
  uiLastByte := 0;

  for iIdx := 1 to iSize do
  begin
    uiCurrByte := Byte(ptrBuffer^);
    uiCurrByte := uiCurrByte xor uiLastByte;
    uiCurrByte := not uiCurrByte;
    uiCurrByte := uiCurrByte xor uiInit;
    uiCurrByte := ((uiCurrByte and $0F) shl 4) or ((uiCurrByte and $F0) shr 4);
    uiLastByte := uiCurrByte;
    Char(ptrBuffer^) := Char(uiCurrByte);
    inc(pChar(ptrBuffer));
  end;
end;

procedure TCryptoTextFile.FastDeCrypt(ptrBuffer: Pointer; iSize: Integer; uiInit: Byte);
var
  iIdx      : Integer;
  uiCurrByte : Byte;
  uiLastByte : Byte;
begin
  uiLastByte := 0;
  for iIdx := 1 to iSize do
  begin
    uiCurrByte := Byte(ptrBuffer^);
    uiCurrByte := ((uiCurrByte and $0F) shl 4) or ((uiCurrByte and $F0) shr 4);
    uiCurrByte := uiCurrByte xor uiInit;
    uiCurrByte := not uiCurrByte;
    uiCurrByte := uiCurrByte xor uiLastByte;
    uiLastByte := Byte(ptrBuffer^);
    Char(ptrBuffer^) := char(uiCurrByte);
    inc(pChar(ptrBuffer));
  end;
end;

procedure TCryptoTextFile.LoadFromFile(const FileName: string);
var
  MemoryStream : TMemoryStream;
begin
  MemoryStream := TMemoryStream.Create;
  MemoryStream.LoadFromFile(FileName);
  MemoryStream.Position := 0;
  FastDeCrypt(MemoryStream.Memory, MemoryStream.Size);
  LoadFromStream(MemoryStream);
end;

procedure TCryptoTextFile.SaveToFile(const FileName: string);
var
  MemoryStream : TMemoryStream;
begin
  MemoryStream := TMemoryStream.Create;
  SaveToStream(MemoryStream);
  MemoryStream.Position := 0;
  FastCrypt(MemoryStream.Memory, MemoryStream.Size);
  MemoryStream.SaveToFile(FileName);
end;

end.


gå der efter tilbage til din form.

Placer 2 memo felter og to knapper på den. Giv hvert af det to knapper en onClickEvent.

skrive så de følgende på de to respektive events :

procedure TForm1.Button1Click(Sender: TObject);
var
  CryptoTextFile : TCryptoTextFile;
begin
  CryptoTextFile := TCryptoTextFile.Create;
  CryptoTextFile.Assign(memo1.Lines);
  CryptoTextFile.SaveToFile(\'C:\\hest.txt\');
  CryptoTextFile.Free;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  CryptoTextFile : TCryptoTextFile;
begin
  CryptoTextFile := TCryptoTextFile.Create;
  CryptoTextFile.LoadFromFile(\'C:\\hest.txt\');
  memo2.Lines.Assign(CryptoTextFile);
  CryptoTextFile.Free;
end;


Jens B
Avatar billede borrisholt Novice
01. maj 2001 - 14:20 #7
michael Er du DØD ?

Jens B http://fotx.net/borrisholt
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester