Ik heb een tijdje geleden hier al een post over gemaakt, alleen heb ik de
afgelopen 3 weken geen tijd meer gehad om te kijken waardoor hij al van de
nieuwsserver af is.

Dus hierbij nog een keer.. alleen nu wat uitgebreider.

Ik zit met de situatie dat er iets in Perl ge-encrypt wordt (wat al gebeurt
in een bestaande database voor de afgelopen 3 jaar) en met een andere
applicatie in PHP moet het weer ge-decrypt worden (dit is dus nieuw). Er is
toendertijd gekozen voor 3DES encryptie. Volgens de documentatie van
Crypt::TripleDES van Perl gebruikt deze de EBC methode (Electronic Code
Book) en deze wordt ook ondersteund door PHP (of eigenlijk door mcrypt, wat
door PHP gebruikt wordt).

Ik heb wat test scripts gemaakt om het uit te testen. Hier is degene in Perl
:

#!/usr/bin/perl -w
use Crypt::TripleDES;
my $des = new Crypt::TripleDES;
my $password = $des->encrypt3 ("TestString", "67&&72#(@&6*()^@*&");
print "Encrypted : $answer\n";


en hier in PHP (CLI) :

#!/usr/local/bin/php
/* Open the cipher */
$td = mcrypt_module_open (MCRYPT_3DES, '', MCRYPT_MODE_ECB,
'/usr/lib/mcrypt-modes');
/* Create the IV and determine the keysize length */
$iv = mcrypt_create_iv (mcrypt_enc_get_iv_size($td), MCRYPT_DEV_URANDOM);
$key = "67&&72#(@&6*()^@*&";
/* Intialize encryption */
mcrypt_generic_init ($td, $key, $iv);
/* Encrypt data */
$encrypted = mcrypt_generic ($td, "TestString");
/* Terminate encryption handler */
mcrypt_generic_deinit ($td);
print "Encrypted : ".$encrypted."\n";

De key hierboven is natuurlijk maar een voorbeeld.

Het probleem is dat volgens de documentatie ze dezelfde methode gebruiken,
en dus eigenlijk hetzelfde zouden moeten produceren. Maar wat ik ook
probeer, perl encrypten->php decrypten, php decrypten->perl->encrypten enz.
er blijven verschillende strings verschijnen. Dus het lijkt alsof 3DES door
beide talen verschillend wordt afgehandeld.

Ik gebruik Perl 5.8.0 met Crypt::TripleDES 0.24 en PHP 4.3.1 met libmcrypt
2.5.6

Heeft iemand een idee?

Alvast hartelijk bedankt.
Dimitri Gunsing