首页 > 解决方案 > 未捕获的 SodiumException:标量和点必须是 SODIUM_CRYPTO_SCALARMULT_SCALARBYTES

问题描述

我正在尝试用 PHP 和 Javascript 实现 ECC 算法(x25519)。

我在 PHP中使用钠,在 javascript 中使用加密,我对密码学有点陌生,这是关于我三天搜索和尝试库的事情。sodium_crypto_scalarmult函数抛出此错误。

Fatal error:  Uncaught SodiumException: scalar and point must be SODIUM_CRYPTO_SCALARMULT_SCALARBYTES byte

NodeJS/Javascript 代码

const { generateKeyPairSync } = require('crypto');

const { publicKey, privateKey } = generateKeyPairSync('x25519', {
   publicKeyEncoding: {
      type: 'spki',
      format: 'der'
   },
   privateKeyEncoding: {
      type: 'pkcs8',
      format: 'der'
   }
});

console.log("Public Key is: ", publicKey)
console.log("The public key value in base64 is: ", publicKey.toString('base64') );

因为我现在只是在实现它之前进行测试,所以我只是将 base64 公钥结果从 javascript 复制并粘贴到 PHP。

PHP

$publicKeyfromJavascript = "";

$bob = sodium_crypto_box_keypair();
$bobPB = sodium_crypto_box_publickey($bob);
$bobsharedKey = sodium_crypto_scalarmult(sodium_crypto_box_secretkey($bob), $publicKeyfromJavascript);

标签: javascriptphpnode.jsencryptionelliptic-curve

解决方案


推荐阅读