首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >libsodium兼容性PHP与Javascript

libsodium兼容性PHP与Javascript
EN

Stack Overflow用户
提问于 2018-04-04 02:43:12
回答 1查看 622关注 0票数 3

我的脚本如下:

代码语言:javascript
复制
//https://packagist.org/packages/paragonie/sodium_compat
//composer require paragonie/sodium_compat
require_once "/path/to/sodium_compat/autoload.php";
$privateKey = "HJu4JU0biDAewq0asdfgtDKXlQZZzmVy2chL0x74yhgr";
$publicKey = "874dmkuhiDAewq0asdfgtDKXlQZZzmVy2chL0x74yhgr";
$message = "HJu4JU0biDAewq0hgbvfcdsXlQZZzmVy2chL0x74yhgr";
$encryption_keypair = \Sodium\crypto_box_keypair_from_secretkey_and_publickey(base64_decode($privateKey), base64_decode($publicKey));
try {
    $decodedMessage = \Sodium\crypto_box_seal_open(base64_decode($message), $encryption_keypair);
    echo $decodedMessage;
} catch (Exception $e) {
    echo $e->getMessage();
}

上面的脚本展示了我如何从已经生成的密钥对中解密加密消息。

我想在Javascript端使用相同的密钥进行相同的解密,以避免服务器过载,我发现这个库应该是相同的libsodium

文档介绍如何解密,如下所示:

代码语言:javascript
复制
let key = sodium.from_hex('724b092810ec86d7e35c9d067702b31ef90bc43a7b598626749914d6a3e033ed');

function encrypt_and_prepend_nonce(message) {
    let nonce = sodium.randombytes_buf(sodium.crypto_secretbox_NONCEBYTES);
    return nonce.concat(sodium.crypto_secretbox_easy(message, nonce, key));
}

function decrypt_after_extracting_nonce(nonce_and_ciphertext) {
    if (nonce_and_ciphertext.length < sodium.crypto_secretbox_NONCEBYTES + sodium.crypto_secretbox_MACBYTES) {
        throw "Short message";
    }
    let nonce = nonce_and_ciphertext.slice(0, sodium.crypto_secretbox_NONCEBYTES),
        ciphertext = nonce_and_ciphertext.slice(sodium.crypto_secretbox_NONCEBYTES);
    return sodium.crypto_secretbox_open_easy(ciphertext, nonce, key);
}

我不明白如何在PHP和Js中兼容解密,他们在Js中引用了一个随机数来创建密钥,但在PHP中相同的库不提供这个功能。有什么需要帮忙的吗?

谢谢

EN

回答 1

Stack Overflow用户

发布于 2018-04-22 03:23:06

This libsodium function reference might help

您需要在线路的两端使用相同的函数组。

  • secretbox secretbox_open
  • box box_open
  • box_seal box_seal_open

->

对于box_seal,请确保在JavaScript中使用公钥,在PHP中使用正确的私钥。

如果您想要共享密钥加密(即两个位置使用相同的密钥),请使用secretbox

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49637082

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档