【发布时间】:2018-01-13 06:53:49
【问题描述】:
我想实现简单的加密。
我使用的是最新的 PHP 7.1.8,由于 mcrypt 已被弃用,我了解了 libsodium。安装了它,这就是我的 PHP 信息的样子:
一切似乎都井井有条。
然后我安装了 paragonie/halite v3.2.0,并尝试了来自 github 页面的简单示例:
$passwd = new HiddenString('correct horse battery staple');
// Use random_bytes(16); to generate the salt:
$salt = "\xdd\x7b\x1e\x38\x75\x9f\x72\x86\x0a\xe9\xc8\x58\xf6\x16\x0d\x3b";
$encryptionKey = KeyFactory::deriveEncryptionKey($passwd, $salt);
运行返回:
Fatal error: Uncaught Error: Undefined constant 'Sodium\CRYPTO_PWHASH_OPSLIMIT_INTERACTIVE' in /app/vendor/paragonie/halite/src/KeyFactory.php on line 274
查看一下代码后,我可以看到代码确实使用了这些常量。
我看到在\Sodium命名空间中使用了旧版本的PHP扩展,并且由于它被确认成为PHP7.2核心扩展,因此重构了函数,用作sodium_*。
也许我遗漏了一些东西,但我的问题是,谁能告诉我我遗漏这些常量的原因是什么?
谢谢!
【问题讨论】:
-
是的,这很奇怪。我检查了源代码,该常量实际上是在Sodium.stub.php 中定义的。无论如何,我认为您应该安装更新版本的libsodium,如answer 所示@Scott Arciszewski 是该项目的维护者,如果答案没有没有解决你的问题,你可以ping他
-
非常感谢@samayo 的回答,我会再次检查版本并让您知道是否有帮助:)
-
虽然我必须承认我的扩展有
sodium_*函数可用,但没有这些常量很奇怪。我使用标准pecl install libsodium安装了扩展。将尝试选择特定版本。
标签: php encryption php-7.1 libsodium