[php/delphi] encryptie

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

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hallo,

Ik ben bezig met encryptie voor delphi 5 en php. Voor delphi heb ik een component TCipherManager die gebruik maakt van de 3way enryptie.

Voorbeeld:

[delphi]
CipherManager1.InitKey('123', nil);
{Encrypt the Data}
with CipherManager1 do
try
cCodeString := EncodeString('Venus staat voor de Maan');

finally
Edit2.Text := cCodeString;
end;
[/delphi]

Wanneer ik de string 'Venus staat voor de Maan' encrypt met Delphi dan krijg ik de volgende waarde: VyQjEzNmAXoSdrKb2l3RUfikfcfbB9F0

De volgende code gebruik ik om te encrypten met PHP:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php

  //encrypt

  $encrypt = cryptopp_create_cipher( CRYPTOPP_CIPHER_3WAY );
  cryptopp_set_mode($encrypt, CRYPTOPP_MODE_CBC);
  cryptopp_set_iv($encrypt, "", 1);
  cryptopp_set_key($encrypt, "123");
  cryptopp_set_plaintext($encrypt, "Venus staat voor de Maan");
  cryptopp_encrypt($encrypt);

  //decrypt

  $decrypt = cryptopp_create_cipher(cryptopp_get_cipher_type($encrypt));
  cryptopp_set_mode($decrypt, cryptopp_get_mode($encrypt));
  cryptopp_set_iv($decrypt, "", 1);
  cryptopp_set_key($decrypt, "123");
  cryptopp_set_ciphertext($decrypt, cryptopp_get_ciphertext($encrypt));
  cryptopp_decrypt($decrypt);

  print "Decrypted plaintext: " . cryptopp_get_plaintext($decrypt) . "<br>";
  print "Ciphertext: " . cryptopp_get_ciphertext($decrypt) . "<br>";
?>


De gecencrypte string van 'Venus staat voor de Maan' onder PHP is: EDD6C6C2D39166DE4CE78336AAC39AFF18ECCAA3178EBE94C4B4FF56A98F66964C635D27

De gecodeerde string kan ik echter met geen mogelijkheid decrypten onder php. Ik heb alle mcrypt() en crypto++ functies gebruikt. Is het ook mogelijk om een encryptie te gebruiken die zowel onder delphi 5 als php te decrypten valt?? Mag eventueel met een andere cipher (des, blowfish...) i.p.v. 3way.

PS ik heb tevens Crypto++ geinstalleerd onder PHP. Echter zonder resultaat.

Alvast bedankt.

[ Voor 6% gewijzigd door Verwijderd op 08-06-2004 10:15 ]


Acties:
  • 0 Henk 'm!

  • MaxxRide
  • Registratie: April 2000
  • Laatst online: 22-06 16:52

MaxxRide

Surf's up

Het eerste wat bij mij opkomt als ik dit lees is dat beiden wellicht met een andere hoeveelheid bits werkt voor de encryptie. Echter, ik moet zeggen dat ik niet veel verstand heb van het algoritme, misschien heb je er wat aan.

If you are not wiping out you are nog pushing enough...


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Pinda schreef op 08 juni 2004 @ 10:14:
Het eerste wat bij mij opkomt als ik dit lees is dat beiden wellicht met een andere hoeveelheid bits werkt voor de encryptie. Echter, ik moet zeggen dat ik niet veel verstand heb van het algoritme, misschien heb je er wat aan.
Ik heb er zelf ook niet zoveel verstand van... Volgens mij is 3way encryptie standaard 96bit. Ik heb dus een database die met een 3way algoritme is geencrypt. Ze zijn geencrypt met delphi (TCipherManager) en staan op een interbase server.

Nu wil de deze data dus decrypten met PHP. Wat niet echt wil lukken :'(

Acties:
  • 0 Henk 'm!

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

NMe

Quia Ego Sic Dico.

Misschien heb je hier wat aan:
http://www.torry.net/quic...ring=encryption&Title=Yes

Overigens schijnt threeway encryptie nogal achterhaald te zijn, er is me op het hart gedrukt dat je beter een andere methode kan gebruiken.

'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!

  • igmar
  • Registratie: April 2000
  • Laatst online: 03-09 22:58

igmar

ISO20022

Van belang is het om precies te weten welk algo gebruikt, de keysizes, en details zoals padding. Zonder die gegevens is het zoeken naar een speld in een hooiberg. Ik zou zelf voor AES kies, dat is snel en standaard, en biedt de mogelijkheid voor variabele keysizes.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
igmar schreef op 08 juni 2004 @ 10:34:
Van belang is het om precies te weten welk algo gebruikt, de keysizes, en details zoals padding. Zonder die gegevens is het zoeken naar een speld in een hooiberg. Ik zou zelf voor AES kies, dat is snel en standaard, en biedt de mogelijkheid voor variabele keysizes.
Het component, welke ik gebruik voor delphi, staat op http://www.torry.net/quic...ring=encryption&Title=Yes en dan de eerst post.

AES wordt niet door het Delphi component ondersteunt. Ook niet voor PHP. Heeft niemand een component voor delphi waarvan de encrypte data ook kan worden gebruikt voor php?

[ Voor 12% gewijzigd door Verwijderd op 08-06-2004 11:12 ]


Acties:
  • 0 Henk 'm!

  • jvdmeer
  • Registratie: April 2000
  • Laatst online: 19:46
Kijk eens op:
http://www.crypto-central.com/

daar staan de componenten: aecRijndael en aecBlowfish. Zolang je de source niet wilt hebben zijn ze gratis te gebruiken, en volgens mij worden beide methodes ook ondersteund door PHP.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
jvdmeer schreef op 08 juni 2004 @ 12:56:
Kijk eens op:
http://www.crypto-central.com/

daar staan de componenten: aecRijndael en aecBlowfish. Zolang je de source niet wilt hebben zijn ze gratis te gebruiken, en volgens mij worden beide methodes ook ondersteund door PHP.
Thanx voor de link. Ik heb het Rijndael componentje gedownload en geinstalleerd onder delphi. Bij de installatie zit ook een applicatie. Deze heb ik gebruikt voor het encrypten van een string.

Wanneer ik in Php dezelfde string wil encrypten dan krijg ik weer een compleet andere waarde. Hoe kan dit???

De volgende parameters gebruik ik:

IV: '123456'
key: '123'
key_size: 128 bit
encryptie mode: ECB
de string die geencrypt moet worden: 'Harry de tapijtbeer'

Resultaat
Delphi: UhyXAXkYeb4Fec3Iz4Q+8qTqLaUl0kw8Db+jEq0SRwY=
Php: R—yy¾yÍÈÏ„>òýϪ|ÕÅè*…O=’>v8

Dat komt niet echt overeen. Waarom niet??? Is er misschien iemand die dit wel voorelkaar krijgt?? Mijn dank is enorm!

Acties:
  • 0 Henk 'm!

  • eghie
  • Registratie: Februari 2002
  • Niet online

eghie

Spoken words!

Je IV en Key waarden zijn niet geldig tenmiste geeft mijn VS .NET compiler aan. Ik heb hem ff gemaakt in C# om te kijken of daar ook verschil tussen zit, maar die waarden kloppen dus niet met de encryptie methode.

[ Voor 13% gewijzigd door eghie op 09-06-2004 21:57 ]


Acties:
  • 0 Henk 'm!

  • Twilight Burn
  • Registratie: Juni 2000
  • Laatst online: 20-04 22:01
de key-size is 128 bit (=16 bytes), je "IV" en "KEY" moeten die lengte dus ook hebben

[edit]
Als ik het resultaat van Delphi zo zie lijkt het wel of die string MIME oid geencodeerd is, terwijl het PHP resultaat gewoon een byte reeks is.

[ Voor 54% gewijzigd door Twilight Burn op 10-06-2004 11:07 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Twilight Burn schreef op 10 juni 2004 @ 11:06:
de key-size is 128 bit (=16 bytes), je "IV" en "KEY" moeten die lengte dus ook hebben

[edit]
Als ik het resultaat van Delphi zo zie lijkt het wel of die string MIME oid geencodeerd is, terwijl het PHP resultaat gewoon een byte reeks is.
Dank je voor je bericht. Ik kom er helaas nog niet helemaal uit. Het lijkt erop dat jij meer verstand van encryptie hebt dan ik.

Mijn vraag is dan ook: Kan jij voor mij misschien iets meer betekenen? Een exacte situatie creeren welke op beide programmeertalen werkt?

Acties:
  • 0 Henk 'm!

  • eghie
  • Registratie: Februari 2002
  • Niet online

eghie

Spoken words!

Verwijderd schreef op 10 juni 2004 @ 18:14:
[...]


Dank je voor je bericht. Ik kom er helaas nog niet helemaal uit. Het lijkt erop dat jij meer verstand van encryptie hebt dan ik.

Mijn vraag is dan ook: Kan jij voor mij misschien iets meer betekenen? Een exacte situatie creeren welke op beide programmeertalen werkt?
Ik ben gister dus bezig geweest met cipher encryptie in c# is ook gelukt. De key en IV die het deden zijn:
key: 1234567890123456
IV: 1234567890123456

Deze doen het zeker weten, probeer het hier eens mee.

Acties:
  • 0 Henk 'm!

  • Twilight Burn
  • Registratie: Juni 2000
  • Laatst online: 20-04 22:01
Normaal gesproken gebruik je geen string-datatype, maar een array met bytes oid, voor dit soort encryptie/decryptie omdat je met echte binaire waarden werkt en er dus een "0" kan uitkomen, en dat vinden strings niet altijd even leuk.

Je moet idd een key en iv pakken die allebei een lengte van 16 karakters hebben.

Echter die string van delphi heb ik eens geMIME-decodeerd, en dan krijg ik er iets uit wat verdacht veel lijkt op je PHP resultaat. Probeer je PHP resultaat eens MIME te encoden (of het delphi resultaat te decoden). Er zijn vast wel PHP/Delphi functies voor die dit kunnen.

Acties:
  • 0 Henk 'm!

  • eghie
  • Registratie: Februari 2002
  • Niet online

eghie

Spoken words!

Twilight Burn schreef op 11 juni 2004 @ 00:04:
Normaal gesproken gebruik je geen string-datatype, maar een array met bytes oid, voor dit soort encryptie/decryptie omdat je met echte binaire waarden werkt en er dus een "0" kan uitkomen, en dat vinden strings niet altijd even leuk.

Je moet idd een key en iv pakken die allebei een lengte van 16 karakters hebben.

Echter die string van delphi heb ik eens geMIME-decodeerd, en dan krijg ik er iets uit wat verdacht veel lijkt op je PHP resultaat. Probeer je PHP resultaat eens MIME te encoden (of het delphi resultaat te decoden). Er zijn vast wel PHP/Delphi functies voor die dit kunnen.
Dat klopt, de Key en IV zijn idd een Byte array, daarom zet ik de strings ook in een bytearray. Je kunt ook de Key en IV laten genereren, tenminste bij c# wel. Daar is het gewoon Rijndael.GenerateKey();. En zo kun je ook een IV genereren. Dit zal je wel helpen om goede keys en IV's te vinden.

Als het goed is kun je idd in beide talen een string in een byte array zetten. Ik zal zo eens kijken hoe.

Hier de delphi versie om een string naar byte array te gooien.
Delphi:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
interface
uses
   ...
type
   //dynamic array type for Array of Byte
   TByteArr = array of byte;

   ...
implementation

function ArrOfByte(AStr: String): TByteArr;
var
   j: integer;
begin
   SetLength( Result, Length(AStr)) ;
   for j := 0 to Length(AStr) - 1 do
     Result[j] := ord(AStr[j + 1]) - 48;
end;

URL waarvan ik hem heb: http://delphi.about.com/cs/adptips2002/a/bltip1002_5.htm

En voor PHP maybe is dit wat:
http://aspn.activestate.c...tcl/TclLib/ByteArrObj.htm

Ik lees hier net iets wat wel handig kan zijn:
You can also convert your byte array to string using the base64
convention then every three bytes are converted to 4 characters.

[ Voor 30% gewijzigd door eghie op 11-06-2004 08:55 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
eghie schreef op 11 juni 2004 @ 08:45:
[...]

Dat klopt, de Key en IV zijn idd een Byte array, daarom zet ik de strings ook in een bytearray. Je kunt ook de Key en IV laten genereren, tenminste bij c# wel. Daar is het gewoon Rijndael.GenerateKey();. En zo kun je ook een IV genereren. Dit zal je wel helpen om goede keys en IV's te vinden.

Als het goed is kun je idd in beide talen een string in een byte array zetten. Ik zal zo eens kijken hoe.

Hier de delphi versie om een string naar byte array te gooien.
Delphi:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
interface
uses
   ...
type
   //dynamic array type for Array of Byte
   TByteArr = array of byte;

   ...
implementation

function ArrOfByte(AStr: String): TByteArr;
var
   j: integer;
begin
   SetLength( Result, Length(AStr)) ;
   for j := 0 to Length(AStr) - 1 do
     Result[j] := ord(AStr[j + 1]) - 48;
end;

URL waarvan ik hem heb: http://delphi.about.com/cs/adptips2002/a/bltip1002_5.htm

En voor PHP maybe is dit wat:
http://aspn.activestate.c...tcl/TclLib/ByteArrObj.htm

Ik lees hier net iets wat wel handig kan zijn:

[...]
Hartelijk dank voor je reactie, ik hoopte dat ik nu een beetje op de goede weg zou zitten maar helaas...

Nu heb ik die iv en de key als byte meegegeven aan het Rijndael component maar de encrypte string komt nog steeds niet overeen met de geencrypte string van php. Deze string van php heb ik ook nog eens geencode met base64_encode().

Ik dacht dat een encryptie met een bepaald algoritme (Rijndael), programmeertaal onafhankelijk zou zijn. Ik zit nu echt met mijn handen in het haar!!!. Er zijn ook bijzonder weinig tutorials op het internet die mij duidelijk uitleggen hoe encryptie precies werkt.

Is er nu echt geen mogelijkheid om wat voor encryptie methode dan ook te kunnen gebruiken met Delphi en PHP??

Ik hoop dat het aan mij ligt…

Acties:
  • 0 Henk 'm!

  • Twilight Burn
  • Registratie: Juni 2000
  • Laatst online: 20-04 22:01
Het algoritme is programmeertaal onafhankelijk, je moet alleen weten hoe je de bepaalde componenten moet gebruiken. Zit er bij de code/componenten die jij gebruikt geen enkel stuk documentatie over hoe je die moet gebruiken en hoe de uitvoer in elkaar zit??

Anders kun je natuurlijk nog altijd zelf een encryptie algoritme implementeren.

Acties:
  • 0 Henk 'm!

  • JochemK
  • Registratie: Maart 2003
  • Laatst online: 20-09 15:34
Niet om het een of ander hoor, maar als je dit gaat gebruiken om passwords te encrypten, zou het voor jou makkelijker, en ook een stuk veiliger zijn om gewoon de entry weer te encrypten en die te vergelijken.

Acties:
  • 0 Henk 'm!

  • eghie
  • Registratie: Februari 2002
  • Niet online

eghie

Spoken words!

kingjotte schreef op 15 juni 2004 @ 10:38:
Niet om het een of ander hoor, maar als je dit gaat gebruiken om passwords te encrypten, zou het voor jou makkelijker, en ook een stuk veiliger zijn om gewoon de entry weer te encrypten en die te vergelijken.
Maar als dit voor data is dan kun je dat niet doen, want dan wil je het originee ook weer terug hebben. Voor wachtwoorden is het zeker veiliger en maybe ook makkelijker om een one-way encryptie te gebruiken, maar bij data is dat niet erg handig.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
kingjotte schreef op 15 juni 2004 @ 10:38:
Niet om het een of ander hoor, maar als je dit gaat gebruiken om passwords te encrypten, zou het voor jou makkelijker, en ook een stuk veiliger zijn om gewoon de entry weer te encrypten en die te vergelijken.
Nee het gaat niet om 1way encryptie zoals md5 en sha1, maar echt om strings te versleutelen in Delphi en deze versleutelde data met PHP te decrypten. En dit wil nog steeds niet lukken |:( :'(
Pagina: 1