Toon posts:

[Delphi/PHP/MySQL] Encrypt & verify data

Pagina: 1
Acties:

Verwijderd

Topicstarter
Dit is een leuke voor de echte die hards *D

Met een nieuw projectje wil ik de gegevens van een gebruiker (username & password) die in een Delphi applicatie worden ingegeven, controleren ergens op een server.

Op deze server draait een PHP-script die de controle uitvoert. En het POSTEN vanuit Delphi is ook geen probleem.

Maar om krakers buiten de deur te houden wil ik de boel natuurlijk een beetje encrypten. Tja, en nou heb ik de afgelopen tijd veel gelzen over data-encrypt, maar heb echt nog geen (goede) oplossing gevonden om iets in Delphi te encrypten, wat daarna door PHP/MySQL nog gebruikt kan worden.

Is er iemand met een slimme suggestie?

Natuurlijk heb ik al nagedacht over een "eigen" encryptiemethode, maar ja, echt hufterproof is dat natuurlijk niet...

  • RickN
  • Registratie: December 2001
  • Laatst online: 14-06-2025
Tja euh, ik ga ervan uit dat je het meeste toch nog wel gewoon zelf wilt doen. Dus kan ik hier wel volstaan met te zeggen dat de eenvoudigste, echt veilige, encryptie waarschijnlijk gewoon RSA is. En aangezien je alleen wat User + Pass info wilt doorsturen kun je volstaat met een redelijk eenvoudige implementatie daarvan. Zoek hier maar eens op RSA. Ik heb zelf al meerdere malen in een thread over RSA gereageerd, dus er is hier zeker veel over te vinden. Aangezien je gaat decoderen op je server hoef je in principe maar 1 keer een private-public key paar te genereren. Daar zou je zelf code voor kunnen schrijven, of je laat iemand zo'n paartje voor je maken met b.v. Mathematica. Aan zo'n paartje zou ik je eventueel wel kunnen helpen, alleen moet je dan van me aannemen dat heel jouw website en alles wat er naatoe wordt gestuurd mij echt geen ruk intereseren ;) . Om het een beetje efficient te houden zou ik een product m (=p*q beide priem) van ongeveer 500 bits nemen. Daarmee blijft je algoritme redelijk efficient en het duurt zolang om te kraken dat niemand die moeite gaat nemen alleen om iemand z'n websitje te kunnen kraken.

Dit is allemaal best leuk om zelf te doen, dus have fun!

He who knows only his own side of the case knows little of that.


  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 14-09 17:42

Gerco

Professional Newbie

Alleen om te controleren hoef je helemaal geen passwords te versturen, encrypted of niet.

Je maakt gewoon gebruik van een challenge-response idee.

De client stuurt de username naar de server
De server stuurt 1 of andere string terug
De client gooit (bijvoorbeeld) een md5 of SHA-1 hash over het password met die string
De server doet hetzelfde
De client stuurt zijn hash naar de server
De server checkt of de beide hashes hetzelfde zijn, zo ja, is het password goed.

En dit hele gedoe kun je natuurlijk ook encrypted laten plaatsvinden voor extra veiligheid.

Het enige waar je dan nog over moet inzitten is hoe je het password op de server gaat krijgen, maar verder hoeft het nooit meer over het net te gaan.

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


  • whoami
  • Registratie: December 2000
  • Laatst online: 15:52
Ik doe het als volgt:

In m'n databank staan de usernames en de paswoorden encrypted.
Bij het inloggen geeft de gebruiker z'n username en paswoord in. Dat encrypt ik met behulp van een zelfgeschreven encrypt-algoritme. Dat algoritme is betrekkelijk eenvoudig en doet een xor operatie van de te encrypteren string met een keystring.
De ge-encrypteerde strings ga ik dan gaan vergelijken met hetgeen in de db zit.

encrypt functie:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
function XOREncrypt(Value : string; CryptKey : string) : string;
var
  i : integer;
  EncryptedString : string;
  KeyLength : integer;
begin
  KeyLength := Length(CryptKey);
  if KeyLength < 1 then begin
    MessageDlg('De sleutel mag geen lege string zijn.', mtError, [mbOk], 0);
    Abort();
  end
  else begin
    EncryptedString := '';
    for i := 1 to Length(Value)  do begin
    EncryptedString := EncryptedString +
                 IntToHex(Ord(Value[i]) xor
                 Ord(CryptKey[(i mod KeyLength) + 1]), 2);
    end;

    Result := EncryptedString;

  end;
end;

https://fgheysels.github.io/