Halite 는 모든 기본 암호화 작업에 libsodium을 사용하는 고급 암호화 인터페이스입니다.
Halite는 생태계를 개선하고 PHP의 암호화를 보다 안전하고 쉽게 구현하기 위한 지속적인 노력의 결과로 Paragon Initiative Enterprises에 의해 만들어졌습니다.
온라인에서 Halite 문서를 읽을 수 있습니다.
Halite는 Mozilla Public License 2.0에 따라 출시됩니다. MPL 조건에 따라 파생 저작물을 제공하지 않고 Halite를 확장하려는 경우 Paragon Initiative Enterprises에서 상업용 라이센스를 사용할 수 있습니다.
백엔드 웹 애플리케이션용 MPL 소프트웨어 조건에 만족하지만 Halite를 사용하는 애플리케이션에 대한 지원 계약을 구매하려는 경우 Paragon Initiative Enterprises에서도 해당 계약을 제공합니다.
중요: 이전 버전의 Halite는 GNU Public License 버전 3(GPLv3)에 따라 사용 가능했습니다. Mozilla Public License 조건에 따라 Halite 4.0.1 이상만 사용할 수 있습니다.
Halite를 사용하려면 먼저 프로젝트 요구 사항에 맞는 버전을 선택해야 합니다. 사용 가능한 Halite 버전에 대한 요구 사항 간의 차이점이 아래에 간략하게 강조되어 있습니다.
PHP | 나트륨 | PECL 나트륨 | 지원하다 | |
---|---|---|---|---|
Halite 5.1 이상 | 8.1.0 | 1.0.18 | 해당 없음(표준) | 활동적인 |
할라이트 5.0.x | 8.0.0 | 1.0.18 | 해당 없음(표준) | 활동적인 |
암염 4.1+ | 7.2.0 | 1.0.15 | 해당 없음(표준) | 지원되지 않음 |
할라이트 4.0 | 7.2.0 | 1.0.13 | 해당 없음(표준) | 지원되지 않음 |
암염 3 | 7.0.0 | 1.0.9 | 1.0.6 / 2.0.4 | 지원되지 않음 |
암염 2 | 7.0.0 | 1.0.9 | 1.0.6 | 지원되지 않음 |
암염 1 | 5.6.0 | 1.0.6 | 1.0.2 | 지원되지 않음 |
참고: Halite 5.0.x는 PHP 8.0에서 작동하지만 PHP 8.1보다 성능이 떨어집니다.
5.1 이전 버전의 Halite가 필요한 경우 해당 특정 분기와 관련된 설명서를 참조하세요.
Halite를 설치하려면 먼저 libsodium을 설치해야 합니다. PHP 확장이 필요할 수도 있고 필요하지 않을 수도 있습니다. 대부분의 사람들에게 이는 달리기를 의미합니다.
sudo apt-get install php7.2-sodium
...또는 운영 체제 및 PHP 버전에 해당하는 명령입니다.
막히는 경우 @aolko가 제공한 이 단계별 가이드가 도움이 될 수 있습니다.
필수 구성 요소가 설치되면 Composer를 통해 Halite를 설치합니다.
composer require paragonie/halite:^5
Halite에 대한 무료(무료) 지원은 최신 주요 버전(현재 5)까지만 확장됩니다.
회사에서 이전 버전의 Halite에 대한 지원이 필요한 경우 Paragon Initiative Enterprises에 문의하여 상용 지원 옵션에 대해 문의하세요.
이전 버전의 Halite에서 쉽게 마이그레이션할 수 있는 방법이 필요한 경우 halite-legacy를 확인하세요.
설명서를 확인하세요. 기본 Halite API는 단순성을 위해 설계되었습니다.
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
먼저 키를 정확히 한 번 생성하고 유지합니다.
<?php
use ParagonIE Halite KeyFactory ;
$ encKey = KeyFactory:: generateEncryptionKey ();
KeyFactory:: save ( $ encKey , ' /path/outside/webroot/encryption.key ' );
그런 다음 다음과 같이 메시지를 암호화/해독할 수 있습니다.
<?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)
그러면 다음과 유사한 내용이 생성됩니다.
MUIDAEpQznohvNlQ-ZRk-ZZ59Mmox75D_FgAIrXY2cUfStoeL-GIeAe0m-uaeURQdPsVmc5XxRw3-2x5ZAsZH_es37qqFuLFjUI-XK9uG0s30YTsorWfpHdbnqzhRuUOI09c-cKrfMQkNBNm0dDDwZazjTC48zWikRHSHXg8NXerVDebzng1aufc_S-osI_zQuLbZDODujEnpbPZhMMcm4-SWuyVXcBPdGZolJyT
중요 : Halite는 문자열이 아닌
Key
개체와 작동합니다.
키 객체를 echo
하려고 하면 해당 내용이 아닌 빈 문자열이 표시됩니다. 키 객체에 대해 var_dump()
시도하면 키 유형에 대한 몇 가지 정보만 얻을 수 있습니다.
키의 원시 바이너리 콘텐츠를 검사하려면 $obj->getRawKeyMaterial()
명시적으로 호출해야 합니다. 이는 대부분의 사용 사례에는 권장되지 않습니다.
<?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 );
무작위로 생성된 키 대신 비밀번호에서 파생된 키를 사용할 수 있습니다.
Halite에는 스트리밍 API를 활용하여 사용 가능한 메모리가 거의 없는(8MB 미만) 시스템에서 대용량 파일(예: 기가바이트)을 암호화할 수 있는 파일 암호화 클래스가 포함되어 있습니다.
<?php
use ParagonIE Halite File ;
use ParagonIE Halite KeyFactory ;
$ encryptionKey = KeyFactory:: loadEncryptionKey ( ' /path/outside/webroot/encryption.key ' );
File:: encrypt ( ' input.txt ' , ' output.txt ' , $ encryptionKey );
PHP 치명적인 오류: Uncaught SodiumException: PHP에서 메모리를 안전하게 지울 수 없으므로 구현되지 않았습니다.
이에 대한 해결책은 libsodium이 설치/활성화되어 있는지 확인하는 것입니다. 자세한 내용은 이 README의 위 내용을 참조하세요.
귀하의 회사가 제품이나 서비스에 이 라이브러리를 사용하는 경우 Paragon Initiative Enterprises로부터 지원 계약을 구매하는 데 관심이 있을 수 있습니다.