Avatar billede orca Nybegynder
19. december 2002 - 08:58 Der er 7 kommentarer og
1 løsning

Simpel kryptering af filer

Hej alle.

Til et lille projekt jeg arbejder på skal jeg kunne gemme nogle filer, som indeholder data. Ligeledes skal jeg selvfølgelig kunne loade dem igen. Som det er nu gemmer jeg mit data som ren tekst, hvor de er linie og kommasepareret. Mit problem er at enhver kan uden problemer gå ind og se indholdet, og redigere i det. Jeg har derfor brug for at kryptere det. Det er på ingen måde "usikre" data, og det skal derfor bare være en let løsning, så den gennemsnitlige bruger ikke kan bryde det.

Findes der en bedre måde at gøre det på evt?
Avatar billede assassin Juniormester
19. december 2002 - 09:01 #1
Angående kryptering: prøv at bruge søge funktionen på eksperten.
Avatar billede morten_s Nybegynder
19. december 2002 - 09:09 #2
Jeg har engang fået disse 2 funktioner af Jens_B, måske du kan bruge dem

procedure TdlgPassword.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 TdlgPassword.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;
Avatar billede jekk Nybegynder
19. december 2002 - 09:45 #3
jeg har for år tilbage lavet en hjemmestrikket kryptering, som virkede, men der opstod senere det problem for migselv, at jeg havde brug for at læse filen ("bagom") og det gav problemer, for jeg kunne sku' ik' huske algoritmen i hovedet !

på den baggrund vil jeg anbefale, at du ikke krypterer din txt-fil, hvis du selv har brug for at kunne læse indholdet og at indholdet ikke er fortroligt - tilføj så istedet en slags nonsenstotal i bunden af filen, som du så checker ved indlæsning - giver resultatet noget andet end det du forventer (beregner), så er filen blevet ændret ulovligt !!!

læg f.eks. alle tegnenes ascii-værdier sammen og tillæg evt. et selvvalgt tal ... og skriv resultatet i bunden..
det har jeg god erfaring med !
Avatar billede loke-liscom Nybegynder
19. december 2002 - 16:31 #4
Hejsa orca.

Jordens simpleste kryptering er en Randseed kryptering. Algoritmen er XOR og nøglen random, det er da let at huske. Jeg har lavet et eks. til dig. Husk altid at kryptere/dekryptere de samme data over den samme nøgle(Randseed). Foredelen er at det et hurtigt let og ikke nødvendigvis så let at knække..

procedure Crypt_Decrypt(RandS : LongInt; Data : Pbyte; DataSize : LongInt);
var
  i : integer;
begin
  randseed := RandS;
  for i := 1 to DataSize do
  begin
    Data^ := Data^ xor random(256);
    inc(Data);
  end;
end;

og et eks. på hvordan du kan bruge den.

procedure TForm1.Button1Click(Sender: TObject);
var
  Data : string;
begin
  Data := 'Denne streng skal snart krypteres...';
  Crypt_Decrypt(1235,@Data[1],Length(Data));
  memo1.lines.add('Krypteret : '+Data);

  Crypt_Decrypt(1235,@Data[1],Length(Data));
  memo1.lines.add('U-krypteret '+Data);
end;

Data behøver ikke være en streng det kan også være et array eller en hvilken som helst anden data mængde.

//Klaus
Avatar billede jekk Nybegynder
19. december 2002 - 16:47 #5
Klaus >>

sku' li'e prøve den ...

den er perfekt - alletiders !
Avatar billede loke-liscom Nybegynder
19. december 2002 - 16:57 #6
Jeg bruger den altid når jeg skal gøre tekst "ulæseligt". Man har jo tit brug for at tekst ikke skal fremstå som tekst. Jeg vil ikke garantere for hvor sikker den er men man skal jo "prøve" sig frem for at finde den rigtige randseed og den kan have 4294967295 forskællige værdier. og ud over det skal man jo kende en eller flere værdier i dataene.

//Klaus
Avatar billede loke-liscom Nybegynder
19. december 2002 - 17:11 #7
Sådan her kunne du jo gøre :

procedure TForm1.Button1Click(Sender: TObject);
var
  Res : integer;
  Data : string;
  fil1, fil2 : file;
begin
  assignfile(fil1,'c:\noget.txt');
  assignfile(fil2,'c:\nogetc.txt');
  reset(fil1,1);
  rewrite(fil2,1);

  repeat
    SetLength(Data,102400);
    blockread(fil1,Data[1],102400,res);
    Crypt_Decrypt(987654,@Data[1],res);
    blockwrite(fil2,Data[1],res);
  until res <> 102400;

  closefile(fil1);
  closefile(fil2);
  memo1.lines.add('DONE');
end;
Avatar billede orca Nybegynder
19. december 2002 - 18:25 #8
Hej alle, undskyld det sene svar :)

Det var klaus's funktion jeg fik til at virke, tak for den :). Den virker perfekt, og sikkerhed er ikke et issue på nogen måde, så den er alt rigeligt.
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

IT-JOB

Riskpoint A/S (Riskpoint Solutions Limited)

Senior Developer

Forsvarsministeriets Materiel- og Indkøbsstyrelse

Vil du være med til at opbygge og udvikle Forsvarets dronekapacitet?

Politiets Efterretningstjeneste

GenAI Specialist i PET