2017-09-14 139 views
1

尝试下面的例子here,但它给了我Libsodium“调用未定义功能sodium_randombytes_buf”

Fatal error: Uncaught Error: Call to undefined function sodium_randombytes_buf() 

最重要的是,该密钥对似乎会产生像怪异的字符串:

kÿòjƒFDú{î—4]F◊î¸˜ßˆu…®_•A∞+

这是正常的吗?

这里是我的代码

<?php 

// send 
$message = 'Hi, this is Alice'; 
$alice_to_bob_kp = sodium_crypto_box_keypair_from_secretkey_and_publickey(
    file_get_contents('./keys/sec-user-1_box_key.txt'), 
    file_get_contents('./keys/pub-user-2_box_key.txt') 
); 
$nonce = sodium_randombytes_buf(SODIUM_CRYPTO_BOX_NONCEBYTES); 
$ciphertext = sodium_crypto_box(
    $message, 
    $nonce, 
    $alice_to_bob_kp 
); 




// receive 
$bob_to_alice_kp = sodium_crypto_box_keypair_from_secretkey_and_publickey(
    // $bob_box_secretkey, 
    // $alice_box_publickey 
    file_get_contents('./keys/sec-user-2_box_key.txt'), 
    file_get_contents('./keys/pub-user-1_box_key.txt') 
); 
$nonce = sodium_randombytes_buf(SODIUM_CRYPTO_BOX_NONCEBYTES); 
$plaintext = sodium_crypto_box_open(
    $ciphertext, 
    $nonce, 
    $bob_to_alice_kp 
); 
if ($plaintext === false) { 
    die("Malformed message or invalid MAC"); 
} 
die($plaintext); 
+0

需要导入在他们的文件中需要 – delboy1978uk

+0

这是一个扩展 – AFwcxx

回答

1

有作为sodium_randombytes_buf()中的示例代码使用\Sodium\randombytes_buf()没有这样的功能。

编辑:

从错误历史: “的sodium_randombytes_ *符号已经被移除了一段时间后,因为PHP现在提供类似的功能,而这个扩展名”

Bug #74896 sodium's .h defines some functions without .c implementation

+0

他们在新版本中使用前缀'钠_ *'而不是命名空间 – AFwcxx

+0

您需要提供代码给reviev。 – mracer164

+0

好的。更新了问题内容 – AFwcxx