L'utilisation d'un Vecteur d'Initialisation dans openssl_encrypt

J'ai eu un coup d'oeil à cette question, et je voulais le faire pour moi-même. Quand j'ai couru ce code (pris directement à partir de cette réponse):

$textToEncrypt = "My super secret information.";
$encryptionMethod = "AES-256-CBC";  //AES is used by the U.S. gov't to encrypt top secret documents.
$secretHash = "25c6c7ff35b9979b151f2136cd13b0ff";

//To encrypt
$encryptedMessage = openssl_encrypt($textToEncrypt, $encryptionMethod, $secretHash, '1234567812345678');

//To Decrypt
$decryptedMessage = openssl_decrypt($encryptedMessage, $encryptionMethod, $secretHash);

//Result
echo "Encrypted: $encryptedMessage <br>Decrypted: $decryptedMessage";

Mais j'ai l'avertissement

openssl_encrypt(): Using an empty Initialization Vector (iv) is potentially insecure and not recommended

J'ai donc eu un coup d'oeil à la docs, mais il "n'est pas de documentation". J'ai trouvé ce commentaire, mais toujours pas de mention de ce que le Vecteur d'Initialisation doit être et comment je dois l'utiliser. Quelqu'un peut-il m'éclairer?

Je sais que je pourrait avoir fait un peu plus Googleing, mais Stackoverflow vient en premier dans de nombreux résultats de recherche j'ai pensé que cette question pourrait être utile à quelqu'un d'autre qui a avoir ce problème.

  • Avez-vous recherche de ce que vecteur d'initialisation signifie?
  • Oui, mais je me demandais comment cela devrait être mieux mis en œuvre dans PHP.
  • Un vide IV est mauvais. C'est ce qui a conduit à l'ensemble de Debian/OpenSSH fiasco a tout à l'arrière.
  • À essayer: php.net/manual/en/function.openssl-encrypt.php#99188 Voir le dernier argument, $iv.
  • oui, comme je l'ai dit, j'ai lu les docs. Il n'a pas vraiment rien révéler sur le problème que je me pose.
  • EDIT: Oups, vient de réaliser que vous avez déjà lié à trop. Vous êtes à la recherche pour ce type de valeur à transmettre en tant que $iv?
  • A noter également, $iv est relativement nouveau (v. 5.3.3), donc je suis sûr que certains anciens manifestations pourraient être hors de date/obsolète.
  • oui, c'est ce que je vous demande. J'aurais dû être plus clair 🙂
  • Eh bien, voici quelque chose d'une manifestation unique: bugs.php.net/bug.php?id=60798 Et voici un autre à l'aide de openssl_random_pseudo_bytes(openssl_cipher_iv_length($method)) et $method = 'aes-128-ecb'.
  • Quelqu'un d'autre mentionné dans un commentaire sur l'une des réponses, mais votre problème le plus immédiat est que le Vecteur d'Initialisation (vous êtes à l'aide de '1234567812345678') est censé être le 4ème paramètre de openssl_encrypt(), pas le troisième. Vous avez besoin de passer une valeur de 0 pour les options. De même pour l'inclure lorsque vous appelez openssl_decrypt().

InformationsquelleAutor Alfo | 2012-08-06