Halite est une interface de cryptographie de haut niveau qui s'appuie sur libsodium pour toutes ses opérations de cryptographie sous-jacentes.
Halite a été créée par Paragon Initiative Enterprises à la suite de nos efforts continus pour améliorer l'écosystème et rendre la cryptographie PHP plus sûre et plus facile à mettre en œuvre.
Vous pouvez lire la documentation Halite en ligne.
Halite est publié sous Mozilla Public License 2.0. Des licences commerciales sont disponibles auprès de Paragon Initiative Enterprises si vous souhaitez étendre Halite sans rendre vos œuvres dérivées disponibles selon les termes de la MPL.
Si vous êtes satisfait des conditions du logiciel MPL pour les applications Web backend mais que vous souhaitez acheter un contrat de support pour votre application qui utilise Halite, ceux-ci sont également proposés par Paragon Initiative Enterprises.
Important : les versions antérieures de Halite étaient disponibles sous la licence publique GNU version 3 (GPLv3). Seuls Halite 4.0.1 et versions ultérieures sont disponibles selon les termes de la licence publique Mozilla.
Avant de pouvoir utiliser Halite, vous devez choisir une version qui correspond aux exigences de votre projet. Les différences entre les exigences des versions disponibles de Halite sont brièvement soulignées ci-dessous.
PHP | libsodium | PECL libsodique | Soutien | |
---|---|---|---|---|
Halite 5.1 et plus récent | 8.1.0 | 1.0.18 | N/A (standard) | Actif |
Halite 5.0.x | 8.0.0 | 1.0.18 | N/A (standard) | Actif |
Halite 4.1+ | 7.2.0 | 1.0.15 | N/A (standard) | Non pris en charge |
Halite 4.0 | 7.2.0 | 1.0.13 | N/A (standard) | Non pris en charge |
Halite 3 | 7.0.0 | 1.0.9 | 1.0.6 / 2.0.4 | Non pris en charge |
Halite 2 | 7.0.0 | 1.0.9 | 1.0.6 | Non pris en charge |
Halite 1 | 5.6.0 | 1.0.6 | 1.0.2 | Non pris en charge |
Remarque : Halite 5.0.x fonctionne sur PHP 8.0, mais les performances sont pires que sur PHP 8.1.
Si vous avez besoin d'une version de Halite antérieure à 5.1, consultez la documentation relative à cette branche particulière.
Pour installer Halite, vous devez d’abord installer libsodium. Vous pouvez ou non avoir besoin de l'extension PHP. Pour la plupart des gens, cela signifie courir...
sudo apt-get install php7.2-sodium
...ou une commande équivalente pour votre système d'exploitation et votre version de PHP.
Si vous êtes bloqué, ce guide étape par étape fourni par @aolko peut être utile.
Une fois les prérequis installés, installez Halite via Composer :
composer require paragonie/halite:^5
La prise en charge gratuite (gratuite) de Halite ne s'étend qu'à la version majeure la plus récente (actuellement 5).
Si votre entreprise a besoin d'une assistance pour une ancienne version de Halite, contactez Paragon Initiative Enterprises pour vous renseigner sur les options d'assistance commerciale.
Si vous avez besoin d'un moyen simple de migrer à partir d'anciennes versions de Halite, consultez halite-legacy.
Consultez la documentation. L'API de base Halite est conçue pour la simplicité :
SymmetricCrypto::encrypt
( HiddenString
, EncryptionKey
) : string
SymmetricCrypto::encryptWithAD
( HiddenString
, EncryptionKey
, string
): string
SymmetricCrypto::decrypt
( string
, EncryptionKey
) : HiddenString
SymmetricCrypto::decryptWithAD
( string
, EncryptionKey
, string
) : HiddenString
AsymmetricCrypto::seal
( HiddenString
, EncryptionPublicKey
) : string
AsymmetricCrypto::unseal
( string
, EncryptionSecretKey
) : HiddenString
AsymmetricCrypto::encrypt
( HiddenString
, EncryptionSecretKey
, EncryptionPublicKey
) : string
AsymmetricCrypto::encryptWithAD
( HiddenString
, EncryptionSecretKey
, EncryptionPublicKey
, string
): string
AsymmetricCrypto::decrypt
( string
, EncryptionSecretKey
, EncryptionPublicKey
) : HiddenString
AsymmetricCrypto::decryptWithAD
( string
, EncryptionSecretKey
, EncryptionPublicKey
, string
) : HiddenString
SymmetricCrypto::authenticate
( string
, AuthenticationKey
) : string
SymmetricCrypto::verify
( string
, AuthenticationKey
, string
): bool
AsymmetricCrypto::sign
( string
, SignatureSecretKey
) : string
AsymmetricCrypto::verify
( string
, SignaturePublicKey
, string
): bool
Tout d’abord, générez et conservez une clé exactement une fois :
<?php
use ParagonIE Halite KeyFactory ;
$ encKey = KeyFactory:: generateEncryptionKey ();
KeyFactory:: save ( $ encKey , ' /path/outside/webroot/encryption.key ' );
Et puis vous pouvez crypter/déchiffrer les messages comme ceci :
<?php
use ParagonIE Halite KeyFactory ;
use ParagonIE Halite Symmetric Crypto as Symmetric ;
use ParagonIE HiddenString HiddenString ;
$ encryptionKey = KeyFactory:: loadEncryptionKey ( ' /path/outside/webroot/encryption.key ' );
$ message = new HiddenString ( ' This is a confidential message for your eyes only. ' );
$ ciphertext = Symmetric:: encrypt ( $ message , $ encryptionKey );
$ decrypted = Symmetric:: decrypt ( $ ciphertext , $ encryptionKey );
var_dump ( $ decrypted -> getString () === $ message -> getString ()); // bool(true)
Cela devrait produire quelque chose de similaire à :
MUIDAEpQznohvNlQ-ZRk-ZZ59Mmox75D_FgAIrXY2cUfStoeL-GIeAe0m-uaeURQdPsVmc5XxRw3-2x5ZAsZH_es37qqFuLFjUI-XK9uG0s30YTsorWfpHdbnqzhRuUOI09c-cKrfMQkNBNm0dDDwZazjTC48zWikRHSHXg8NXerVDebzng1aufc_S-osI_zQuLbZDODujEnpbPZhMMcm4-SWuyVXcBPdGZolJyT
Important : Halite fonctionne avec des objets
Key
, pas des chaînes.
Si vous tentez de echo
un objet clé, vous obtiendrez une chaîne vide plutôt que son contenu. Si vous essayez de var_dump()
un objet clé, vous obtiendrez simplement quelques informations sur le type de clé dont il s'agit.
Vous devez appeler explicitement $obj->getRawKeyMaterial()
si vous souhaitez inspecter le contenu binaire brut d'une clé. Ceci n'est pas recommandé dans la plupart des cas d'utilisation.
<?php
use ParagonIE Halite KeyFactory ;
use ParagonIE HiddenString HiddenString ;
$ passwd = new HiddenString ( ' correct horse battery staple ' );
// Use random_bytes(16); to generate the salt:
$ salt = "xddx7bx1ex38x75x9fx72x86x0axe9xc8x58xf6x16x0dx3b" ;
$ encryptionKey = KeyFactory:: deriveEncryptionKey ( $ passwd , $ salt );
Une clé dérivée d'un mot de passe peut être utilisée à la place d'une clé générée aléatoirement.
Halite inclut une classe de cryptographie de fichiers qui utilise une API de streaming pour permettre de chiffrer des fichiers volumineux (par exemple des gigaoctets) sur un système avec très peu de mémoire disponible (c'est-à-dire moins de 8 Mo).
<?php
use ParagonIE Halite File ;
use ParagonIE Halite KeyFactory ;
$ encryptionKey = KeyFactory:: loadEncryptionKey ( ' /path/outside/webroot/encryption.key ' );
File:: encrypt ( ' input.txt ' , ' output.txt ' , $ encryptionKey );
Erreur fatale PHP : Uncaught SodiumException : ceci n'est pas implémenté, car il n'est pas possible d'effacer en toute sécurité la mémoire de PHP
La solution à ce problème est de s'assurer que libsodium est installé/activé. Voir ci-dessus dans ce README pour plus d'informations.
Si votre entreprise utilise cette bibliothèque dans ses produits ou services, vous pourriez être intéressé par l'achat d'un contrat de support auprès de Paragon Initiative Enterprises.