2017-10-10 7 views
0

Je travaille sur un projet qui nécessite le cryptage AES d'une enveloppe de savon en utilisant les exigences ci-dessous.Encryptage de l'enveloppe SOAP en utilisant AES

  • clé de chiffrement: myKey-1234567abcdef
  • cryptage AES-256
  • 128 taille de bloc
  • PKCS7 rembourrage
  • 16 vecteur bit (vecteur est attaché un message avant crypté)
  • Cipher Block Chaining (CBC

C'est ce que j'ai essayé:

$key = 'myKey-1234567abcdef'; 
$encryptionMethod = "AES-256-CBC"; 
$iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_CBC); 
$iv = substr(mcrypt_create_iv($iv_size, MCRYPT_RAND), 0, 16); 
$xml = openssl_encrypt($xml,$encryptionMethod, $key, 0, $iv); 

Je reçois actuellement 400 mauvaise erreur de demande et il semble y avoir beaucoup d'options pour l'argument des constantes mcrypt fonctions, je me demandais si ma mise en œuvre satisfait aux besoins de rembourrage, la taille du bloc et vecteur?

J'apprécie toutes les suggestions, merci d'avance!

+2

AES est MCRYPT_RIJNDAEL_128, pas 256 avec confusion ... Cela peut aider https://gist.github.com/lkorth/4061732 C'est une sorte de chose en désordre, c'est pourquoi j'ai supprimé ma réponse. – ArtisticPhoenix

Répondre

1

Première: Votre clé n'est pas une longueur appropriée pour AES-256. Je réalise que la clé que vous utilisez ici est un exemple, mais assurez-vous que celle que vous avez fournie est de 32 caractères (256 bits). Si ce n'est pas le cas, demandez des précisions au destinataire. Deuxièmement: Vous mélangez les extensions mcrypt et openssl de façon inappropriée ici. De toute façon, vous ne devriez pas utiliser mcrypt, car il est non maintenu, parfois cassé, et sera entièrement supprimé en PHP 7.2. Au lieu de cela, coder en dur la taille IV 16 et utiliser openssl_random_pseudo_bytes pour le générer:

$iv = openssl_random_pseudo_bytes(16); 
$xml = openssl_encrypt($xml, $encryptionMethod, $key, 0, $iv); 

Troisième: Par défaut, openssl_encrypt() encode sa sortie en base64. Le destinataire ne peut pas s'attendre à cela. Passez OPENSSL_RAW_DATA comme le quatrième argument à openssl_encrypt() (en remplaçant 0) pour obtenir la sortie non codée.

+0

Merci pour la réponse. Et, désolé, oui, ils ont demandé le cryptage AES-256 (voir édité). – AnchovyLegend

+0

Cela vaut la peine d'indiquer explicitement que vous ne devez pas utiliser mcrypt car il est obsolète et n'a pas été maintenu activement depuis des années. – Sammitch

+0

Qu'en est-il du décryptage? aurais-je besoin de fournir le même vecteur pour cela? – AnchovyLegend