Halite es una interfaz de criptografía de alto nivel que depende de libsodium para todas sus operaciones de criptografía subyacentes.
Halite fue creada por Paragon Initiative Enterprises como resultado de nuestros continuos esfuerzos para mejorar el ecosistema y hacer que la criptografía en PHP sea más segura y fácil de implementar.
Puede leer la documentación de Halite en línea.
Halite se publica bajo la licencia pública de Mozilla 2.0. Las licencias comerciales están disponibles en Paragon Initiative Enterprises si desea ampliar Halite sin que sus trabajos derivados estén disponibles según los términos de la MPL.
Si está satisfecho con los términos del software MPL para aplicaciones web backend pero desea adquirir un contrato de soporte para su aplicación que utiliza Halite, Paragon Initiative Enterprises también los ofrece.
Importante: Las versiones anteriores de Halite estaban disponibles bajo la licencia pública GNU versión 3 (GPLv3). Solo Halite 4.0.1 y versiones posteriores están disponibles según los términos de la licencia pública de Mozilla.
Antes de poder utilizar Halite, debe elegir una versión que se ajuste a los requisitos de su proyecto. A continuación se destacan brevemente las diferencias entre los requisitos de las versiones disponibles de Halite.
PHP | libsodio | PECL libsódico | Apoyo | |
---|---|---|---|---|
Halita 5.1 y más reciente | 8.1.0 | 1.0.18 | N/A (estándar) | Activo |
Halita 5.0.x | 8.0.0 | 1.0.18 | N/A (estándar) | Activo |
Halita 4.1+ | 7.2.0 | 1.0.15 | N/A (estándar) | No compatible |
Halita 4.0 | 7.2.0 | 1.0.13 | N/A (estándar) | No compatible |
Halita 3 | 7.0.0 | 1.0.9 | 1.0.6 / 2.0.4 | No compatible |
Halita 2 | 7.0.0 | 1.0.9 | 1.0.6 | No compatible |
Halita 1 | 5.6.0 | 1.0.6 | 1.0.2 | No compatible |
Nota: Halite 5.0.x funciona en PHP 8.0, pero el rendimiento es peor que en PHP 8.1.
Si necesita una versión de Halite anterior a la 5.1, consulte la documentación relevante para esa rama en particular.
Para instalar Halite, primero necesita instalar libsodium. Puede que necesites o no la extensión PHP. Para la mayoría de las personas, esto significa correr...
sudo apt-get install php7.2-sodium
...o un comando equivalente para su sistema operativo y versión de PHP.
Si está atascado, esta guía paso a paso aportada por @aolko puede resultarle útil.
Una vez que tenga instalados los requisitos previos, instale Halite a través de Composer:
composer require paragonie/halite:^5
El soporte gratuito (gratis) para Halite solo se extiende a la versión principal más reciente (actualmente 5).
Si su empresa requiere soporte para una versión anterior de Halite, comuníquese con Paragon Initiative Enterprises para consultar sobre las opciones de soporte comercial.
Si necesita una forma sencilla de migrar desde versiones anteriores de Halite, consulte halite-legacy.
Consulte la documentación. La API básica de Halite está diseñada para simplificar:
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
Primero, genere y persista una clave exactamente una vez:
<?php
use ParagonIE Halite KeyFactory ;
$ encKey = KeyFactory:: generateEncryptionKey ();
KeyFactory:: save ( $ encKey , ' /path/outside/webroot/encryption.key ' );
Y luego puedes cifrar/descifrar mensajes de esta manera:
<?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)
Esto debería producir algo similar a:
MUIDAEpQznohvNlQ-ZRk-ZZ59Mmox75D_FgAIrXY2cUfStoeL-GIeAe0m-uaeURQdPsVmc5XxRw3-2x5ZAsZH_es37qqFuLFjUI-XK9uG0s30YTsorWfpHdbnqzhRuUOI09c-cKrfMQkNBNm0dDDwZazjTC48zWikRHSHXg8NXerVDebzng1aufc_S-osI_zQuLbZDODujEnpbPZhMMcm4-SWuyVXcBPdGZolJyT
Importante : Halite funciona con objetos
Key
, no con cadenas.
Si intenta hacer echo
de un objeto clave, obtendrá una cadena vacía en lugar de su contenido. Si intenta var_dump()
un objeto clave, obtendrá algunos datos sobre el tipo de clave que es.
Debe invocar $obj->getRawKeyMaterial()
explícitamente si desea inspeccionar el contenido binario sin formato de una clave. Esto no se recomienda para la mayoría de los casos de uso.
<?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 );
Se puede utilizar una clave derivada de una contraseña en lugar de una generada aleatoriamente.
Halite incluye una clase de criptografía de archivos que utiliza una API de transmisión para permitir el cifrado de archivos grandes (por ejemplo, gigabytes) en un sistema con muy poca memoria disponible (es decir, menos de 8 MB).
<?php
use ParagonIE Halite File ;
use ParagonIE Halite KeyFactory ;
$ encryptionKey = KeyFactory:: loadEncryptionKey ( ' /path/outside/webroot/encryption.key ' );
File:: encrypt ( ' input.txt ' , ' output.txt ' , $ encryptionKey );
Error fatal de PHP: SodiumException no detectada: esto no está implementado, ya que no es posible borrar la memoria de PHP de forma segura
La solución a esto es asegurarse de que libsodium esté instalado/habilitado. Consulte más arriba en este README para obtener más información.
Si su empresa utiliza esta biblioteca en sus productos o servicios, es posible que le interese adquirir un contrato de soporte de Paragon Initiative Enterprises.