[PHP/Delphi] Encryptie/Decryptie

Pagina: 1
Acties:
  • 101 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hallo allemaal,

Ik zit met een encryptie/decryptie probleem. Het geval is dat ik met delphi een string ge-encrypt moet opslaan in de database. Deze string wordt daarna weer ge-decrypt door PHP uitgelezen.

Verschillende encryptie methoden heb ik inmiddels gebruikt, echter geen blijkt zowel onder delphi als php dezelfde waarden terug te geven.

In dit geval gebruik ik de encryptie methode 'DES' waar ik wel wat informatie over heb gevonden. Na zoeken op het web kwam ik op de site http://www.crypto-central.com/index.html een DES component tegen.

De volgende invoer heb ik gegeven voor dit component onder Delphi 5:

Text to encrypt: boggles the inivisble monkey will rule the world
code:
1
2
3
DES1.LoadIVString('Init Vector');
DES1.InitialiseString('This is a very secret key');
DES1.EncString(edtTestText.Text, TempStr);


Resultaat is:
eZdgNHLnoQkFGGTAiCBLZvnv7UwTCg52b7R3IDTlyDF663UtBRaIQ6gt-5kPgQsj9OQeA6VYDBY

Voor php ik heb de mcrypt module geinstalleerd, en ik zie deze ook staan onder phpinfo().

De volgende code gebruik ik onder php om een string te encrypten/decrypten
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
<?
$text = "boggles the inivisble monkey will rule the world";
$key = "This is a very secret key";

$iv_size = mcrypt_get_iv_size(MCRYPT_DES, MCRYPT_MODE_ECB);
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);

$enc = mcrypt_encrypt(MCRYPT_DES, $key, $text, MCRYPT_MODE_ECB, $iv);
echo "$enc<br>";

$crypttext = mcrypt_decrypt(MCRYPT_DES, $key, $enc, MCRYPT_MODE_ECB, $iv);
echo "$crypttext<br>";
?>


En het resultaat is:
vsš 3hÄ96/09vJgKtf3DUERmU8L+lCiAiKbkgLlXp6HxGftw4nWCc7/jvFsVnVonv/EydPv/

Zoals je kan zien komen de waarden niet overeen. Ook worden de waarden niet goed gedecrypt in de andere programmeertaal.

Ik heb nu echt alles geprobeerd maar krijg het niet voorelkaar, heeft iemand een voorzetje of een oplossing. Zit echt met mijn handen in het haar. Het mag eventueel ook wel een ander encryptie methode zijn!

Alvast bedankt.

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Ik heb je vorige topics over encryptie op beide platforms ook gelezen (en erin gereageerd :P), en ik vind het vreemd dat je nog steeds met een probleem zit. Je kan toch desnoods zelf een implementatie maken van een bestaande encryptie, die je dan schrijft voor PHP én Delphi? Want dit schiet blijkbaar niet op. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Kan je nagaan hoe diep dit zit :D.

Ik had dit probleem even naar de achtergrond geschoven maar nu moet ik het toch echt gaan gebruiken. En ik weet nu wel dat encryptie niet in mijn bloed zit :'( :'(.
Je kan toch desnoods zelf een implementatie maken van een bestaande encryptie, die je dan schrijft voor PHP én Delphi?
Dat is dus idd mijn allerlaatste optie, maar ik dacht ik zal het nog maar eens proberen.

Acties:
  • 0 Henk 'm!

  • Scorpion
  • Registratie: April 2000
  • Laatst online: 18-01-2024

Scorpion

not to lame to read BitchX.doc

is een ssl verbinding misschien niet slim?

  • pietje63
  • Registratie: Juli 2001
  • Laatst online: 22:05

pietje63

RTFM

Hoe goed beveiligd moet het zijn? Zelf iets simpels schrijven is niet zo heel moeilijk..
- verwissel de tekens volgens een patroon (dit patroon kan eventueel afhangen van de eerste letter -> laat deze eerste letter dan op een vaste plaats terug komen)
- laat de ene letter een paar letters verder/terug gaan etc
- voeg op vaste plaatsen random data in
etc hieruit haalt een leek niet 1,2,3 de info (en een prof hacker kraakt alles)

De grootste Nederlandstalige database met informatie over computers met zoekfunctie!!


  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 28-02 22:17
Zelf een rsa algoritme schrijven is nou ook weer niet zo moeilijk hoor.

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info


  • matthijsln
  • Registratie: Augustus 2002
  • Laatst online: 20-09 00:06
Zelf een encryptiealgoritme bedenken :X

Indien je PHP scripts ook alleen op Windows draaien en platformonafhankelijkheid niet is vereist is dit misschien een optie (zelf niet geprobeerd):

http://users.chello.be/ws36637/php4delphi.html

Maak een PHP extensie met de Delphi implementatie van je encryptiealgoritme, gebruik deze vanuit PHP via de extensie en je gebruikt in beide omgevingen dezelfde implementatie.

Andersom kan je natuurlijk ook code uit libraries die PHP gebruikt voor encryptie (mcrypt) vanuit Delphi aanroepen.

Of je zoekt verder naar implementaties die dezelfde "smaak" van het algorimte implementeren...

  • RwD
  • Registratie: Oktober 2000
  • Niet online

RwD

kloonikoon

ik weet niet of het hetzelfde is als hierboven gezegd wordt, maar je kunt altijd nog een dll schrijven, Delphi kan ze gebruiken, en PHP kan dat ook. En als je dan op een ander platform moet wezen, ik denk dat Delphi dat wel voor je kan regelen...

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 21:47

Creepy

Tactical Espionage Splatterer

RwD schreef op 12 augustus 2004 @ 09:03:
ik weet niet of het hetzelfde is als hierboven gezegd wordt, maar je kunt altijd nog een dll schrijven, Delphi kan ze gebruiken, en PHP kan dat ook. En als je dan op een ander platform moet wezen, ik denk dat Delphi dat wel voor je kan regelen...
Delphi kan alleen executables en DLL's maken voor Windows. Als je geen Windows specifieke code gebruikt dan is het mogelijk om je exe of DLL naar Linux om te zetten m.b.v. Kylix.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Verwijderd

Topicstarter
Als tussen oplossing had ik gekozen voor een kleine delphi console applicatie. In deze applicatie zat dus dat encryptie componentje (TCiphermanager).

Via de php functie Exec riep ik de applicatie aan. De geencryprte string uit de database werd dan als parameter meegegeven. De output was dan de gedecrypte string.

Per pagina wordt de applicatie ongeveer 100x gestart (niet tegelijk natuurlijk). Dit gaat goed wanneer er 1 gebruiker op de pagina komt.

Wanneer ik op meerdere computers tegelijk de pagina ging open liep de Apache server vast. :'(

De server draait op windows XP, PHP en delpi maken gebruik van een firebird/interbase database.

Heeft iemand ook een idee waarom apache dan vast loopt?? De console applicatie doet geen database aanroep.
Hoe goed beveiligd moet het zijn?
Zeer goed beveiligd :D (serieus)
Indien je PHP scripts ook alleen op Windows draaien en platformonafhankelijkheid niet is vereist is dit misschien een optie (zelf niet geprobeerd):

http://users.chello.be/ws36637/php4delphi.html
Ik ga dit eens even uitzoeken!

  • eghie
  • Registratie: Februari 2002
  • Niet online

eghie

Spoken words!

Zoals ik in vorige topic had gezegd ligt dit aan je key en aan je iv. Het DES alogritme genereert die encrypted data aan de hand van die waarden. Als hij bij delphi anders is dan bij php komt daar een andere waarde uit.

Vorige topic

Je hebt nu trouwens voor DES gekozen ipv Rijndael, maar beide zijn qua implentatie aan elkaar gelijk. Het veiligst is om het 3DES alogritme te gebruiken.

[ Voor 41% gewijzigd door eghie op 12-08-2004 19:22 ]


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 21:47

Creepy

Tactical Espionage Splatterer

En misschien nog een handige toevoeging:
Ik weet niet precies hoe PHP met z'n encryptie functies omgaat, maar MySQL geeft van een MD5 hash een string terug met hierin hex codes. De meeste Delphi MD5 implementaties geven de hash "gewoon" als zijnde een aantal bytes of integers terug. Pas als je deze omzet naar een hexadecimale notatie in string vorm is dit weer gelijk aan de MD5 functie van MySQL.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • Domokoen
  • Registratie: Januari 2003
  • Laatst online: 21:50
Tsja.... volgens mij initialiseer je je DES implementatie niet hetzelfde in beide omgevingen.
DES1.LoadIVString('Init Vector');
DES1.InitialiseString('This is a very secret key');
Ik zie nergens dat je 'Init Vector' laadt in PHP... bovendien kan de manier waarop de IV dan geinitialiseerd wordt per implementatie verschillen. "InitialiseString" zou ook best eens anders kunnen werken in PHP en Delphi.
Waarom maak je niet gewoon een 56-bits DES key (liever nog een 3DES key) en laadt je die direct? Dan heb je geen gedoe met het genereren van keys uit strings (wat vanuit cryptografisch oogpunt ook nog eens onvelig is).

Acties:
  • 0 Henk 'm!

Verwijderd

Ik ken de routines niet, maar DES heeft ook nog een aantal modes, ( CBC en Electronic code Book ). Moet wel hetzelfde zijn aan beide kanten.
Overigens kun je ook Rijndael gebruiken, zijn ook meerder implementaties van, en is duidelijker beschreven ( en trager en veiliger ).
Ook bekent als AES

Acties:
  • 0 Henk 'm!

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 06-09 00:37

curry684

left part of the evil twins

matthijsln schreef op 12 augustus 2004 @ 02:08:
Zelf een encryptiealgoritme bedenken :X
In "Writing Secure Code, 2nd Edition" staat daar een meesterlijke quote over :) Iets in de strekking van "use proven encryption standards that have been able to withstand attacks for years. The algorithm you thought up while waiting on the bus is probably unsafer than clear text since at least the hackers won't expect that" :)

Professionele website nodig?


Acties:
  • 0 Henk 'm!

Verwijderd

PS Wat ik ook niet begrijp is de weergave van de encrypte string.
DES is een binair encryptie algoritme, waar dus alleen binaire waardes in gaan en uitkomen in blokken van 8 bytes. Worden deze bytes als letters weergeven en ingevoerd, bedenk dan of dat wel goed gaat.
Pagina: 1