2012-11-21 5 views
3

Je pense que mon intall PHP pourrait avoir des problèmes. Lorsque je tente de faire, je memcrypt_decrypt PHP utilisation correcte

Attention: mcrypt_decrypt() [function.mcrypt-Décrypter]: L'initialisation du module échoué

Je suis en train d'écrire un petit bout de code qui décrypter la chaîne suivante crypté avec AES-128 en utilisant le mode ECB.

Key (codé en base64): aXJhbmRvbXNlY3VyZWtleQ ==

chaîne Encrypted> (codé en base64): 3l6xiNdgRG + PkBw5M0lawvJ/fmuTZPRhEcbtqAmOpDI =

Je continue de recevoir des erreurs de module.

Voici ce que j'ai essayé:

<?PHP 
$retval = mcrypt_decrypt("AES-128", 
    base64_decode("aXJhbmRvbXNlY3VyZWtleQ=="), 
    base64_decode("3l6xiNdgRG+PkBw5M0lawvJ/fmuTZPRhEcbtqAmOpDI") , 
    "ECB"); 

echo $retval; 
?> 

ici est mon phpinfo pertinent. Je ne vois pas AES-128. Peut-être que c'est le problème.

mcrypt 
    mcrypt support enabled 
    Version  2.5.8 
    Api No 20021217 
    Supported ciphers cast-128 gost rijndael-128 twofish arcfour  cast-256   loki97  rijndael-192 saferplus wake blowfish-compat des rijndael-256 serpent xtea blowfish enigma rc2 tripledes 
    Supported modes  cbc cfb ctr ecb ncfb nofb ofb stream 
+0

Eh bien, pouvez-vous montrer votre code? – Ibu

+0

Veuillez publier votre phpinfo(). Ce n'est probablement pas un problème avec votre code, mais avec votre installation de PHP. –

Répondre

5

Vous êtes proche, il y a 2 petits problèmes.

D'abord, AES-128 n'est pas une constante de chiffrement valide de mcrypt. AES est vraiment rijndael pour lequel vous avez un soutien. Le mcrypt cipher constant pour AES-128 est MCRYPT_RIJNDAEL_128 qui est la chaîne rijndael-128. Deuxièmement, le mode mcrypt doit être en minuscules.

Changer votre code:

<?php 
$retval = mcrypt_decrypt("rijndael-128", 
    base64_decode("aXJhbmRvbXNlY3VyZWtleQ=="), 
    base64_decode("3l6xiNdgRG+PkBw5M0lawvJ/fmuTZPRhEcbtqAmOpDI") , 
    "ecb"); 

echo $retval; 

cède la sortie correcte de: Is 3 random enough?

Personnellement, je partirais avec les constantes de Mcrypt plutôt que les chaînes réelles, donc remplacer rijndael-128 avec MCRYPT_RIJNDAEL_128 et ecb avec MCRYPT_MODE_ECB. Sur une note de côté, pensez à utiliser CBC avec un IV au lieu de ECB si vous cryptez beaucoup d'informations sensibles. Mcrypt peut facilement créer des IVs pour vous avec les longueurs appropriées. Exemple de code:

$ivsize = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC); 
$iv  = mcrypt_create_iv($ivsize); 

Utilisez cette IV lors du cryptage et du décryptage. Vous pouvez transmettre l'IV avec vos données sous la forme d'une chaîne encodée en base64 pour la portabilité.

+0

+1 Pour utiliser les constantes mcrypt et la recommandation d'utiliser CBC. Je voudrais développer sur la façon de créer correctement un IV, car je vois souvent les gens abuser IVs. – NullUserException

+0

Merci beaucoup monsieur. Si je reçois ce travail, je pourrais demander ce que votre compte Paypal est. En fait, ils sont pacifiques, donc je suis toujours à l'heure. Merci beaucoup – hforbess

+0

@hforbess Merci d'avoir posté une question détaillée. N'hésitez pas à nous contacter si vous avez d'autres questions. – drew010