piggly / php-encryption
使用 libsodium 扩展生成签名或加密消息的简单类。
Requires
- php: ^7.2
- ext-openssl: *
- ext-sodium: *
Requires (Dev)
- phpunit/phpunit: ^6.4
This package is auto-updated.
Last update: 2024-09-18 07:29:14 UTC
README
该库是为了简化数据加密过程而创建的。其目的是提供简单的接口,以满足不同类型加密的需求。
任何加密类都必须扩展 BaseCrypto
类,并包含一个返回 array
类型键的 createKeys()
方法,以辅助创建安全的加密方法密钥。
目前有两个方法可用
BasicCrypto
使用内置函数openssl_encrypt
和openssl_decrypt
以简单方式加密数据。 需要 PHP 的 openssl 扩展。SolidumCrypto
使用最新的 LibSodium 加密和签名数据。 需要 PHP 的 sodium 扩展(更多信息请见安装部分)。
如果您喜欢这个库的功能并想支持这项工作,请随意通过以下随机像素值进行捐赠
aae2196f-5f93-46e4-89e6-73bf4138427b
❤。
安装
您可以通过 Composer 使用以下命令安装此库: composer require piggly/php-encryption
。建议安装后运行 composer check-platform-reqs
命令,以检查您是否拥有使用一个或多个加密方法所需的扩展。
Libsodium
根据您的操作系统进行安装。对于 Linux、Mac 和 Windows,安装步骤不同。
Libsodium
库不是 PHP 的原生库。必须手动安装以确保 SolidumCryto
类能够正确运行。因此,在您的服务器上,执行以下命令 sudo apt-get install libsodium-dev
。
然后,使用以下命令安装 PHP 的 PECL 扩展管理器 PECL(请参阅此处了解详细信息): sudo apt-get install php-pear
。最后,使用以下命令为 PHP 安装 libsodium
扩展并激活它: sudo pecl install -f libsodium
并在 php.ini
的 cli
和 fpm
版本中激活它。
了解更多关于 Libsodium 的信息请在此处。
如何使用?
使用 OpenSSL 进行基本加密
使用 BasicCrypto
类创建基本的加密操作。为了开始,请始终生成一个安全的密钥并将其保存在 .env
或类似的环境中。请始终将密钥记录在受第三方保护读取的文件中。
生成随机密钥的简单方法是通过使用 BasicCrypto::createKeys()
函数。该函数将返回包含 secret_key
的 array
。然后,使用 BasicCrypto::setKeys()
方法用 secret_key
初始化类,并使用 BasicCrypto::encrypt()
和 BasicCrypto::decrypt()
方法进行加密。请参阅
// Chaves $keys = BasicCrypto::createKeys(); // <- salve $keys['secret_key'] em um arquivo e leia-o posteriormente em uma constante, ambiente ou afins... // Inicialize as chaves BasicCrypto::setKeys( SECRET_KEY ); // ... // Mais tarde no código // ... $encrypted = BasicCrypto::encrypt('this is my secret message'); $decrypted = BasicCrypto::decrypt($encrypted); if ( $descrypted !== false ) { /** O conteúdo foi descriptografado */ }
使用 Sodium 进行加密
Sodium 是一个为安全操作设计的现代库。它是多平台和多语言的。其目标是提供构建高级加密工具所需的主要操作。
除了构建安全的加密之外,最大的优点之一是库的可移植性。这意味着您可以使用 PHP 加密消息,如果需要的话,也可以用 NodeJs、Python 等语言进行解密。
使用SodiumCrypto
类来创建基本的加密和签名操作。开始时,始终生成安全的密钥序列并将其保存到具有.env
或类似功能的环境中。始终将密钥写入一个防止第三方读取的文件。
注意!与Sodium
一起工作的密钥需要由库中的算法生成。因此,始终使用SodiumCrypto::createKeys()
方法。该方法将返回一个包含以下密钥的数组
。
生成并保存密钥后,使用SodiumCrypto::setKeys()
方法初始化类,定义所有所需的密钥。最后,使用SodiumCrypto::encrypt()
和SodiumCrypto::descrypt()
方法进行加密和解密,以及使用SodiumCrypto::sign()
和SodiumCrypto::checkSignature()
方法进行签名和验证签名。请参阅以下内容。
// Chaves $keys = SodiumCrypto::createKeys(); // <- salve todas as chaves em um arquivo e leia-o posteriormente em uma constante, ambiente ou afins... // Inicialize as chaves SodiumCrypto::setKeys( PUBLIC_KEY, PRIVATE_KEY, SIGNATURE_PUBLIC_KEY, SIGNATURE_PRIVATE_KEY ); // ... // Mais tarde no código // ... $encrypted = SodiumCrypto::encrypt('this is my secret message'); $decrypted = SodiumCrypto::decrypt($encrypted); if ( $descrypted !== false ) { /** O conteúdo foi descriptografado */ } // Para criação de assinaturas $signedMessage = SodiumCrypto::sign('i am signed'); $validSignature = SodiumCrypto::checkSignature($signedMessage); if ( $validSignature !== false ) { /** O conteúdo é autentico */ }
加密 ≠ 签名
使用SodiumCrypto::sign()
方法时,消息不会被加密。在这种情况下,消息将仅被签名以确保其在往返过程中不被修改。但是,仍然可以对其进行加密。
$signedMessage = SodiumCrypto::sign('i am signed'); $encrypted = SodiumCrypto::encrypt($signedMessage); $decrypted = SodiumCrypto::decrypt($encrypted); $validSignature = SodiumCrypto::checkSignature($decrypted); if ( $validSignature !== false ) { /** O conteúdo é autentico */ }
变更日志
有关代码中所有变更的信息,请参阅CHANGELOG文件。
代码测试
这个库使用PHPUnit。我们对这个应用程序的所有主要类进行了测试。
vendor/bin/phpunit
贡献
在提交贡献之前,请参阅CONTRIBUTING文件以获取信息。
安全性
如果您发现任何与安全相关的问题,请通过dev@piggly.com.br发送电子邮件,而不是使用GitHub的issue追踪器。
致谢
支持项目
Piggly Studio是一家位于巴西里约热内卢的本地代理商。如果您喜欢这个库的功能并希望支持这项工作,请随时通过随机密钥Pix aae2196f-5f93-46e4-89e6-73bf4138427b
进行捐赠 ❤。
许可证
MIT许可证(MIT)。有关更多信息,请参阅LICENSE。