Avatar billede hensewg Nybegynder
30. marts 2008 - 15:24 Der er 16 kommentarer og
1 løsning

hvad med en "Saltphrase"?

Hej eksperter,

Kan man ikke lægge en form for "SaltPhrase" (tror jeg nok det hedder) ind i denne kode (Dette er en opfølger på tråden "Undgå at læse .txt fil."):

function encrypt(tekst,kode:string):string;
var
  I: integer;
begin
  for I := 1 to length(tekst) do
  begin
    tekst[I] := chr(ord(tekst[I])+ord(kode[(I mod length(kode))+1]));
  end;
  result := tekst;
end;

function decrypt(tekst,kode:string):string;
var
  I: integer;
begin
  for I := 1 to length(tekst) do
  begin
    tekst[I] := chr(ord(tekst[I])-ord(kode[(I mod length(kode))+1]));
  end;
  result := tekst;
end;
Avatar billede arne_v Ekspert
30. marts 2008 - 15:58 #1
Principielt jo, men det tjener intet formål.

En salt er et fast prefix som man tilføjer til det man krypterer/hasher.

Det bruges for at undgå et dictionary attack med kendte hash algoritmer.

Ovenstående vignere cipher vil man ikke angribe med et dictionary attack, så
det tjener ikke noget formål.
Avatar billede arne_v Ekspert
30. marts 2008 - 15:59 #2
Hvis du ville så:

function encrypt(tekst,kode:string):string;
var
  I: integer;
begin
  tekst := 'noget lang tekst bla bla' + tekst;
  for I := 1 to length(tekst) do

og tilsvarende skære den konstante streng væk i decrypt.
Avatar billede hensewg Nybegynder
30. marts 2008 - 18:17 #3
Det jeg vil bruge saltet til er at det skal hele tiden være en del af koden i .txt filen, sådan at man ikke bare kan slette/reset koden.

Det her er nok et dumt spørgsmål, men hvad er den "konstante streng i decrypt"?
Avatar billede arne_v Ekspert
30. marts 2008 - 18:50 #4
Når du dekrypterer så får du jo 'noget lang tekst bla bla' med og det skal bare smides væk.
Avatar billede arne_v Ekspert
30. marts 2008 - 18:50 #5
Og jeg forstår ikke helt din problem stilling. Skal du bruge det krypterede
password til at tilgå en database med ? Eller skal du verifcere at brugeren har
indtastet et korrekt password ? Eller ?
Avatar billede hensewg Nybegynder
30. marts 2008 - 19:08 #6
Jeg skal bruge det til at verifcere at brugeren har indtastet et korrekt password.

Og hvordan ser den konstante streng ud? sådan jeg kan smide 'noget lang tekst bla bla' væk?
Avatar billede arne_v Ekspert
30. marts 2008 - 19:20 #7
Så kan du vælge:

1) beholde encrypt og decryot som de er
  glemme salt frase
  betragte dig som værende sikker mod de 99% der ikke ved en snus om IT

2) skifte til at bruge hash som MD5 eller SHA-256
  bruge salt frase
  være så sikker som du nu kan blive
Avatar billede arne_v Ekspert
30. marts 2008 - 19:21 #8
decrypt skulle bare:

result := copy(tekst, 23, length(tekst)-23);

for at skippe det faste.
Avatar billede arne_v Ekspert
30. marts 2008 - 19:23 #9
Avatar billede hensewg Nybegynder
30. marts 2008 - 19:29 #10
saltet er ikke kun for at beskytte koden imod at blive læst. det skal også bruges til, at man ikke kan "reset" passwordet. Mit password ligger i en .txt fil, men selv om det er krypteret, kan man stadig ændre/slette alt hvad der står i min .txt fil. ogj eg har lavet mit program sådan at hvis der ikke står noget i den .txt så skal man skrive et nyt. så jeg ville bruge saltet, sådan at det skulle være der, ellers ville programmet ikke virke. sådan man ikke bare kunne reset koden.
Avatar billede hensewg Nybegynder
30. marts 2008 - 19:39 #11
og jeg kan ikke få "result := copy(tekst, 23, length(tekst)-23);" til at fungere.
Avatar billede arne_v Ekspert
30. marts 2008 - 20:05 #12
Det her virker hos mig (jeg har rearrangeret en lille smule):

program obfuscate;

(* NOTE: Dette er en obfuskerings algoritme snarere end en        *)
(*      egentlig kryptering. Algoritmen har kunnet brydes siden  *)
(*      midten af 1800 tallet.                                  *)

{$APPTYPE CONSOLE}

uses
  SysUtils;

function encrypt(tekst,kode:string):string;

var
  I: integer;

begin
  for I := 1 to length(tekst) do
  begin
    tekst[I] := chr(ord(tekst[I])+ord(kode[(I mod length(kode))+1]));
  end;
  result := tekst;
end;

function decrypt(tekst,kode:string):string;

var
  I: integer;

begin
  for I := 1 to length(tekst) do
  begin
    tekst[I] := chr(ord(tekst[I])-ord(kode[(I mod length(kode))+1]));
  end;
  result := tekst;
end;

const
  salt = 'Bla bla bla';

function encryptsalt(tekst,kode:string):string;

begin
  result := encrypt(salt+tekst,kode);
end;

function decryptsalt(tekst,kode:string):string;

var
  tmp : string;

begin
  tmp := decrypt(tekst,kode);
  result := copy(tmp,length(salt)+1,length(tmp)-length(salt));
end;

var
  p1,c1,p2,c2,p3:string;

begin
  p1 := 'Dette er en lille test';
  writeln(p1);
  c1 := encrypt(p1,'Arnes kodeord');
  writeln(c1);
  p2 := decrypt(c1, 'Arnes kodeord');
  writeln(p2);
  c2 := encryptsalt(p2,'Arnes kodeord');
  writeln(c2);
  p3 := decryptsalt(c2, 'Arnes kodeord');
  writeln(p3);
  readln;
end.
Avatar billede hensewg Nybegynder
30. marts 2008 - 20:13 #13
og så for at kalde de ting til en fil skal man bruge:

private
    Password: String;
      Procedure HentFil;
      Procedure GemFil;

procedure TForm1.HentFil;
var
  F: TextFile;
begin
  AssignFile(F, 'C:\Programmer\Hense Software\HenNedLukPro.HS');
  Reset(F);
  ReadLn(F, Password);
  Password := decrypt(Password, 'nedluk');
  CloseFile(F);
end;

procedure TForm1.GemFil;
var
  F: TextFile;
begin
Password := Edit4.text;
  AssignFile(F, 'C:\Programmer\Hense Software\HenNedLukPro.HS');
  ReWrite(F);
  WriteLn(F, encrypt(password, 'nedluk'));
  CloseFIle(F);
end;

eller hva'?
Avatar billede arne_v Ekspert
30. marts 2008 - 20:27 #14
Ja.

(der bruger du så varianten uden salt, men ...)
Avatar billede hensewg Nybegynder
30. marts 2008 - 20:28 #15
hvordan får jeg så salt med ind i den?

(Skriv den som svar så får du dine point)
Avatar billede arne_v Ekspert
30. marts 2008 - 20:46 #16
Hvis du bruger 20:05:05 så:

procedure TForm1.HentFil;
var
  F: TextFile;
begin
  AssignFile(F, 'C:\Programmer\Hense Software\HenNedLukPro.HS');
  Reset(F);
  ReadLn(F, Password);
  Password := decryptsalt(Password, 'nedluk');
  CloseFile(F);
end;

procedure TForm1.GemFil;
var
  F: TextFile;
begin
Password := Edit4.text;
  AssignFile(F, 'C:\Programmer\Hense Software\HenNedLukPro.HS');
  ReWrite(F);
  WriteLn(F, encryptsalt(password, 'nedluk'));
  CloseFIle(F);
end;
Avatar billede arne_v Ekspert
30. marts 2008 - 20:46 #17
Og svar.
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