Halite é uma interface de criptografia de alto nível que depende do libsodium para todas as suas operações de criptografia subjacentes.
Halite foi criada pela Paragon Initiative Enterprises como resultado de nossos esforços contínuos para melhorar o ecossistema e tornar a criptografia em PHP mais segura e fácil de implementar.
Você pode ler a documentação do Halite online.
Halite é lançado sob Mozilla Public License 2.0. Licenças comerciais estão disponíveis na Paragon Initiative Enterprises se você desejar estender o Halite sem disponibilizar seus trabalhos derivados sob os termos do MPL.
Se você estiver satisfeito com os termos do software MPL para aplicativos da web de backend, mas gostaria de adquirir um contrato de suporte para seu aplicativo que usa Halite, eles também são oferecidos pela Paragon Initiative Enterprises.
Importante: Versões anteriores do Halite estavam disponíveis sob a Licença Pública GNU versão 3 (GPLv3). Somente Halite 4.0.1 e versões mais recentes estão disponíveis sob os termos da Licença Pública da Mozilla.
Antes de poder usar o Halite, você deve escolher uma versão que atenda aos requisitos do seu projeto. As diferenças entre os requisitos para as versões disponíveis do Halite são brevemente destacadas abaixo.
PHP | libsódio | PECL libssódico | Apoiar | |
---|---|---|---|---|
Halite 5.1 e mais recente | 8.1.0 | 1.0.18 | N/A (padrão) | Ativo |
Halita 5.0.x | 8.0.0 | 1.0.18 | N/A (padrão) | Ativo |
Halita 4.1+ | 7.2.0 | 1.0.15 | N/A (padrão) | Não compatível |
Halita 4.0 | 7.2.0 | 1.0.13 | N/A (padrão) | Não compatível |
Halita 3 | 7.0.0 | 1.0.9 | 1.0.6/2.0.4 | Não compatível |
Halita 2 | 7.0.0 | 1.0.9 | 1.0.6 | Não compatível |
Halita 1 | 5.6.0 | 1.0.6 | 1.0.2 | Não compatível |
Nota: Halite 5.0.x funciona no PHP 8.0, mas o desempenho é pior que no PHP 8.1.
Se você precisar de uma versão do Halite anterior à 5.1, consulte a documentação relevante para esse branch específico.
Para instalar o Halite, primeiro você precisa instalar o libsodium. Você pode ou não precisar da extensão PHP. Para a maioria das pessoas, isso significa correr...
sudo apt-get install php7.2-sodium
...ou um comando equivalente para seu sistema operacional e versão do PHP.
Se você tiver dúvidas, este guia passo a passo fornecido por @aolko pode ser útil.
Depois de instalar os pré-requisitos, instale o Halite através do Composer:
composer require paragonie/halite:^5
O suporte gratuito (gratuito) para Halite se estende apenas à versão principal mais recente (atualmente 5).
Se sua empresa precisar de suporte para uma versão mais antiga do Halite, entre em contato com a Paragon Initiative Enterprises para obter informações sobre opções de suporte comercial.
Se você precisar de uma maneira fácil de migrar de versões mais antigas do Halite, confira halite-legacy.
Confira a documentação. A API Halite básica foi projetada para ser simples:
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
Primeiro, gere e persista uma chave exatamente uma vez:
<?php
use ParagonIE Halite KeyFactory ;
$ encKey = KeyFactory:: generateEncryptionKey ();
KeyFactory:: save ( $ encKey , ' /path/outside/webroot/encryption.key ' );
E então você pode criptografar/descriptografar mensagens assim:
<?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)
Isso deve produzir algo semelhante a:
MUIDAEpQznohvNlQ-ZRk-ZZ59Mmox75D_FgAIrXY2cUfStoeL-GIeAe0m-uaeURQdPsVmc5XxRw3-2x5ZAsZH_es37qqFuLFjUI-XK9uG0s30YTsorWfpHdbnqzhRuUOI09c-cKrfMQkNBNm0dDDwZazjTC48zWikRHSHXg8NXerVDebzng1aufc_S-osI_zQuLbZDODujEnpbPZhMMcm4-SWuyVXcBPdGZolJyT
Importante : Halite funciona com objetos
Key
, não com strings.
Se você tentar fazer echo
de um objeto-chave, obterá uma string vazia em vez de seu conteúdo. Se você tentar var_dump()
um objeto-chave, obterá apenas alguns fatos sobre o tipo de chave.
Você deve invocar $obj->getRawKeyMaterial()
explicitamente se quiser inspecionar o conteúdo binário bruto de uma chave. Isso não é recomendado para a maioria dos 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 );
Uma chave derivada de uma senha pode ser usada no lugar de uma gerada aleatoriamente.
Halite inclui uma classe de criptografia de arquivos que utiliza uma API de streaming para permitir que arquivos grandes (por exemplo, gigabytes) sejam criptografados em um sistema com muito pouca memória disponível (ou seja, 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 );
Erro fatal do PHP: Uncaught SodiumException: Isso não foi implementado, pois não é possível limpar a memória do PHP com segurança
A solução para isso é garantir que o libsodium esteja instalado/ativado. Veja acima neste README para obter mais informações.
Se sua empresa usa esta biblioteca em seus produtos ou serviços, você pode estar interessado em adquirir um contrato de suporte da Paragon Initiative Enterprises.