PHP 7.2 est disponible

Par:
fredericmazue

ven, 01/12/2017 - 14:58

La disponibilité de PHP 7.2 en version finale vient d'être annoncée sur la liste de diffusion PHP.

Si PHP 7.2 apporte divers petits changements et améliorations au langage comme par exemple la conversion des clés numériques lors d'opérations de transtypages explicites de tableaux vers objets et réciproquement, ce qui distingue principalement cette mouture est l'intégration de la librairie cryptographique Sodium (également connu sous le nom de libsodium)

C'est Scott Arciszewski, responsable du développement à Paragon Initiative Enterprises, qui a proposé cette intégration. Selon lui, cette intégration permettra de corriger de nombreux problèmes de sécurité présents dans les CMS écrits en PHP, faute d'outils cryptographiques appropriés au sein du langage PHP.

Sodium est une bibliothèque pour le cryptage, le décryptage, le hashage de mots de passe, etc. Elle est basée sur la librairie cryptographique NaCl créée par le mathématicien programmeur Daniel J Bernstein, connu pour avoir développé le célèbre logiciel de messagerie qmail.

Sodium expose des APIs de haut niveau qui rendent les manipulations cryptographiques très simples.

Exemple de cryptage d'un message:

//une clé privée$
alice_ecdh_secret =
    "\x69\xf2\x08\x41\x2d\x8d\xd5\xdb\x9d\x0c\x6d\x18\x51\x2e\x86\xf0" .
    "\xec\x75\x66\x5a\xb8\x41\x37\x2d\x57\xb0\x42\xb2\x7e\xf8\x9d\x8c";

//une clé publique
$bob_ecdh_public =
    "\xe8\x98\x0c\x86\xe0\x32\xf1\xeb\x29\x75\x05\x2e\x8d\x65\xbd\xdd" .
    "\x15\xc3\xb5\x96\x41\x17\x4e\xc9\x67\x8a\x53\x78\x9d\x92\xc7\x54";

$message_keypair = sodium_crypto_box_keypair_from_secretkey_and_publickey(
    $alice_ecdh_secret,
    $bob_ecdh_public
);

$plaintext = "Ce message secret est seulement pour vos yeux";
$nonce = random_bytes(24);

// et finalement le cryptage à partir de la clé publique:
$ciphertext = sodium_crypto_box($plaintext, $nonce, $message_keypair);

Puis décryptage du message :

$received = sodium_crypto_box_open(
    $received_ciphertext,
    $received_nonce,
    $message_keypair
);