OVH Cloud OVH Cloud

visibilité de données cryptées par perl et python

3 réponses
Avatar
ReM
Bonjour,

Je souhaite récupérer des données crypter en Blowfish en mode CBC avec un
programme perl et un programme python.
j'arrive à crypter en perl et décrypter en python mais pas l'inverse. Le
probleme vit-il de python ou de perl ??
Merci de votre aide !!!

Librairie perl (crypto.pm) :
use Crypt::CBC;
my $key = "totototo";

sub CRYPTO_init
{
$cipher = new Crypt::CBC( {'key' => $key,
'cipher' => 'Blowfish',
'iv' => '',
'regenerate_key' => 0, # default true
'padding' => 'space',
'prepend_iv' => 0
} );
return $cipher;
}
### Utilisation :
# $cipher_text = $cipher->encrypt_hex( $plain_text);
# $plain_text = $cipher->decrypt_hex( $cipher_text );

fichier perl (test.pl):
#!/usr/bin/perl
use lib "./";
use crypto;
$cipher = CRYPTO_init();
$nom1 = "chateaux";
$enom1 = $cipher->encrypt_hex($nom1);
print "Cryptage de $nom1 : $enom1\n";
$nom2 = "08ec45a9144733e8";
$enom2 = $cipher->decrypt_hex($nom2);
print "Décryptage de $nom2 : $enom2\n";

Module Python (crypto.py):
#!/usr/bin/python
from Crypto.Cipher import Blowfish
import string
cle = "totototo"
def encrypt_data ( data_to_encrypt ):
if data_to_encrypt != "":
obj=Blowfish.new( cle, Blowfish.MODE_CBC )
return "".join([string.zfill(hex(ord(x))[2:], 2)
for x in tuple(obj.encrypt(data_to_encrypt))])
else:
return ""

def decrypt_data ( crypted_data ):
if crypted_data != "":
obj=Blowfish.new( cle, Blowfish.MODE_CBC )
dd = ""
i = 0
while i<len(crypted_data):
a = crypted_data[i:i+2]
dd+=chr(int(a,16))
i+=2
return obj.decrypt(dd)
else:
return ""

Fichier python (test.py)
#!/usr/bin/python
from crypto import *
n1 = "chateaux"
print "Cryptage de " + n1 + " : " + encrypt_data( n1 )
n2 = '08ec45a9144733e81a2dc96c1cdde22d'
print "Décryptage de %s : %s" %( n2, decrypt_data( n2 ) )

$ ./test.pl
Cryptage de chateaux : 08ec45a9144733e83d6c66cb3eca2812
Décryptage de 08ec45a9144733e8 :
$ ./test.py
Cryptage de chateaux : 08ec45a9144733e8
Décryptage de 08ec45a9144733e81a2dc96c1cdde22d : chateaux

3 réponses

Avatar
Thibault
Bonjour,

J'y connais pas grand chose en crypto, mais vu l'exemple: il y aurait
pas un probleme sur la longueur de l'encryption ?

Toi meme tu set les variables :
n2 = '08ec45a9144733e81a2dc96c1cdde22d'
$nom2 = "08ec45a9144733e8";
à des longueurs différentes

Cela ne peut-il pasposer probleme ?

Thibault




ReM wrote:
Bonjour,

Je souhaite récupérer des données crypter en Blowfish en mode CBC avec un
programme perl et un programme python.
j'arrive à crypter en perl et décrypter en python mais pas l'inverse. Le
probleme vit-il de python ou de perl ??
Merci de votre aide !!!

Librairie perl (crypto.pm) :
use Crypt::CBC;
my $key = "totototo";

sub CRYPTO_init
{
$cipher = new Crypt::CBC( {'key' => $key,
'cipher' => 'Blowfish',
'iv' => '',
'regenerate_key' => 0, # default true
'padding' => 'space',
'prepend_iv' => 0
} );
return $cipher;
}
### Utilisation :
# $cipher_text = $cipher->encrypt_hex( $plain_text);
# $plain_text = $cipher->decrypt_hex( $cipher_text );

fichier perl (test.pl):
#!/usr/bin/perl
use lib "./";
use crypto;
$cipher = CRYPTO_init();
$nom1 = "chateaux";
$enom1 = $cipher->encrypt_hex($nom1);
print "Cryptage de $nom1 : $enom1n";
$nom2 = "08ec45a9144733e8";
$enom2 = $cipher->decrypt_hex($nom2);
print "Décryptage de $nom2 : $enom2n";

Module Python (crypto.py):
#!/usr/bin/python
from Crypto.Cipher import Blowfish
import string
cle = "totototo"
def encrypt_data ( data_to_encrypt ):
if data_to_encrypt != "":
obj=Blowfish.new( cle, Blowfish.MODE_CBC )
return "".join([string.zfill(hex(ord(x))[2:], 2)
for x in tuple(obj.encrypt(data_to_encrypt))])
else:
return ""

def decrypt_data ( crypted_data ):
if crypted_data != "":
obj=Blowfish.new( cle, Blowfish.MODE_CBC )
dd = ""
i = 0
while i<len(crypted_data):
a = crypted_data[i:i+2]
dd+=chr(int(a,16))
i+=2
return obj.decrypt(dd)
else:
return ""

Fichier python (test.py)
#!/usr/bin/python
from crypto import *
n1 = "chateaux"
print "Cryptage de " + n1 + " : " + encrypt_data( n1 )
n2 = '08ec45a9144733e81a2dc96c1cdde22d'
print "Décryptage de %s : %s" %( n2, decrypt_data( n2 ) )

$ ./test.pl
Cryptage de chateaux : 08ec45a9144733e83d6c66cb3eca2812
Décryptage de 08ec45a9144733e8 :
$ ./test.py
Cryptage de chateaux : 08ec45a9144733e8
Décryptage de 08ec45a9144733e81a2dc96c1cdde22d : chateaux




Avatar
Thibault
T'a essayé de mettre le prepend_iv = 1 ?
Ils parlent de ca dans le perldoc Crypt::CBC a propos d'un codage 8/16
bytes mais j'ai pas tout capté ...



ReM wrote:
Ben c bien ça justement le problême !!!
Je me suis peut etre mal exprimé tout à l'heure....
En fait perl me retourne 8 charactères de trop mais qui sont pas présent au
codage par python mais compris au décodage par python. Seulement l'inverse,
c'est à dire le codage en python ne sort pas ces 8 derniers caractères ( que
je ne comprends pas ) et du coup le décodage en perl est impossible.
Si quelqu'un sait d'où proviennent ces 8 caractères ????
Merci ;o)

$cipher = new Crypt::CBC( {'key' => $key,
'cipher' => 'Blowfish',
'iv' => '',
'regenerate_key' => 0, # default true
'padding' => 'space',
'prepend_iv' => 0
} );
return $cipher;






Avatar
ReM
ça c'est en relation avec le vecteur d'initialisation. ça me rajoute un
RandomI ou IV donc c'est pas ça.
Merci de ton aide ;o) Faut encore creuser.......

"Thibault" a écrit dans le message de
news:
T'a essayé de mettre le prepend_iv = 1 ?
Ils parlent de ca dans le perldoc Crypt::CBC a propos d'un codage 8/16
bytes mais j'ai pas tout capté ...



ReM wrote:
Ben c bien ça justement le problême !!!
Je me suis peut etre mal exprimé tout à l'heure....
En fait perl me retourne 8 charactères de trop mais qui sont pas présent
au


codage par python mais compris au décodage par python. Seulement
l'inverse,


c'est à dire le codage en python ne sort pas ces 8 derniers caractères
( que


je ne comprends pas ) et du coup le décodage en perl est impossible.
Si quelqu'un sait d'où proviennent ces 8 caractères ????
Merci ;o)

$cipher = new Crypt::CBC( {'key' => $key,
'cipher' => 'Blowfish',
'iv' => '',
'regenerate_key' => 0, # default true
'padding' => 'space',
'prepend_iv' => 0
} );
return $cipher;