你能为此目的推荐 PHP 代码吗?
按优先顺序。
1. PECL 钠
如果你还没有听说过 libsodium,现在就去了解它。如果可能,我强烈建议您使用 libsodium。
这些说明应该让您开始在您的计算机上安装 libsodium 和 PECL 扩展。该电子书的其余部分应让您了解如何使用特定组件,并包含大量示例代码。如果你需要一个 PHP 密码学的起点来指向非专家,libsodium 是当今最好的。
有关密钥认证加密,请参阅电子书的这一章。
2. paragonie/石盐
(免责声明:我写了 Halite。)
libsodium 的所有功能,以及如下所示的界面:
use \ParagonIE\Halite\Symmetric\Crypto as Symmetric;
$key = KeyFactory::loadEncryptionKey('/path/to/key/file');
$ciphertext = Symmetric::encrypt($plaintext, $key);
看看:paragonie/halite。
3. defuse/php-加密
Defuse Security 在 Github 上的defuse/php-encryption上发布了一个加密*库。
通过加密,我实际上是指经过身份验证的加密:
- 版本 1:
- 带有 PKCS#7 填充和随机 IV 的 AES-128-CBC
- HMAC-SHA-256(以恒定时间验证)
- 使用 HKDF-SHA256 将您的密钥拆分为加密密钥和身份验证密钥
- 版本 2:
- 带有随机 nonce 的 AES-256-CTR(CTR 模式不需要填充)
- HMAC-SHA-256(以恒定时间验证)
- 使用 HKDF-SHA256 将您的密钥拆分为加密密钥和身份验证密钥;现在使用随机 HKDF salt 来减轻加密 2^64 块后随机 CTR 中生日冲突的影响
免责声明:我是这个库的合著者之一,尽管我的大部分贡献要等到版本 2 重写之后才会落地,其中包括版本标记和用于安全加密/解密文件的流接口。
4.zend/zend-crypt
我最后推荐这个,因为我没有亲自审核过它,但它是Zend 框架的一部分,许多 PHP 安全专家证明了它的质量。如果您已经在使用 Zend 框架,请继续使用它。
更新:由于我最初写了这个答案,我确实在Zend\Crypt\PublicKey\Rsa
(ZF2015-10 aka CVE-2015-7503)中发现了一个问题。然而,他们的对称密钥加密实现似乎是安全的。