【问题标题】:PHP paragonie/halite - missing Sodium\ constants?PHP paragonie/halite - 缺少钠\常量?
【发布时间】: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


【解决方案1】:

我用一个简单的版本规范让它工作:

pecl install libsodium-1.0.6

不确定幕后发生了什么,但我猜我的paragonie/halite 版本没有完全适应最新的sodium PHP 扩展。也许这将在即将到来的 PHP7.2 中得到解决,当它成为核心 PHP 扩展时。

目前我坚持使用这个版本。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多