我试图在IIS的PHP 7.2.7中使用随机字节和钠对字符串进行加密。
$nonce = random_bytes('SODIUM_CRYPTO_SECRETBOX_NONCEBYTES');
和
$nonce = random_bytes(SODIUM_CRYPTO_SECRETBOX_NONCEBYTES);
都返回此错误:
Uncaught TypeError: random_bytes() expects parameter 1 to be integer
但这很好用
$key = random_bytes('SODIUM_CRYPTO_SECRETBOX_KEYBYTES');
Google似乎使我失望了,搜索时没有任何帮助。
答案 0 :(得分:0)
节选this article:
钠(和NaCl)是一个“经过修饰的”库:这意味着所用的算法已被选择,无法更改。该库使用了一些最可靠的算法,包括Elliptic-curve cryptography(ECC)。
random_bytes()不用于加密消息,此功能仅生成随机字节码。
此示例代码用于使用Sodium生成密钥:
$msg = 'This is a super secret message!';
// Generating an encryption key and a nonce
$key = random_bytes(SODIUM_CRYPTO_SECRETBOX_KEYBYTES); // 256 bit
$nonce = random_bytes(SODIUM_CRYPTO_SECRETBOX_NONCEBYTES); // 24 bytes
// Encrypt
$ciphertext = sodium_crypto_secretbox($msg, $nonce, $key);
// Decrypt
$plaintext = sodium_crypto_secretbox_open($ciphertext, $nonce, $key);
echo $plaintext === $msg ? 'Success' : 'Error';
看到了吗? SODIUM_CRYPTO_SECRETBOX_NONCEBYTES
实际上是一个预定义的常数,它是密钥的长度。遵循this document获取其他预定义的常量。
答案 1 :(得分:0)
您的第二次实施
$nonce = random_bytes(SODIUM_CRYPTO_SECRETBOX_NONCEBYTES);
如果已安装扩展并正确配置,则应该可以使用。如果我是你,我会调查的。
您可以使用phpinfo()
检查PHP的配置,以检查钠盐是否已启用。
而且,如果尚未安装,请使用:
sudo pecl install -f libsodium
答案 2 :(得分:0)
已更新
取决于您如何配置PHP。您可能无法正确访问该常数。
请运行此脚本,看看它是否可以解决您的问题。让我知道结果是什么。
if getattr(sys, 'frozen', False):
geckodriver_path = os.path.join(sys._MEIPASS, "geckodriver.exe")
caps = DesiredCapabilities().FIREFOX
caps["pageLoadStrategy"] = "none"
options = Options()
options.set_headless(True)
driver= webdriver.Firefox(geckodriver_path,desired_capabilities=caps, options = options)
else:
caps = DesiredCapabilities().FIREFOX
caps["pageLoadStrategy"] = "none"
options = Options()
options.set_headless(True)
driver = webdriver.Firefox(desired_capabilities=caps, options = options)