gpt4 book ai didi

javascript - 使用来自后端(PHP sodium)的公钥在前端(sodium-plus.js)加密

转载 作者:行者123 更新时间:2023-11-30 06:10:32 25 4
gpt4 key购买 nike

我想在网络浏览器中使用 sodium-plus.js 和在 PHP sodium 中生成的 key 来实现匿名公钥加密,如下所示:

$keyPair = sodium_crypto_box_keypair();

$privateKey = sodium_crypto_box_secretkey($keyPair);
$publicKey = sodium_crypto_box_publickey($keyPair);

使用此方法生成的 key 在 PHP 中使用 sodium_crypto_box_sealsodium_crypto_box_seal_open 方法可以正常工作,但是,我无法使其在前端工作。我的做法:

<script type='text/javascript' src='js/sodium-plus.min.js?v=0.4.2'></script>
<script>
async function getPublicKey() {

return X25519PublicKey.from(
'<?php echo sodium_bin2hex($publicKey); ?>', // 6a00b1550ccdeff3886a469b9cd4e5dc9aecd30f5deb3dd3e29fd01f8a32103f
'hex'
);

}

async function encryptString(clearText, publicKey) {

if (!window.sodium) window.sodium = await SodiumPlus.auto();

let cipherText = await sodium.crypto_box_seal(clearText, publicKey);

return cipherText.toString('hex');

}

(async function () {

let clearText = "String that contains secret.";
let publicKey = await getPublicKey();

console.log(await encryptString(clearText,publicKey));

})();
</script>

这会在控制台返回 TypeError: Argument 2 must be an instance of X25519PublicKey

注意事项:

  1. 从前端的 sodium.crypto_box_keypair() 派生的公钥有效。
  2. 尝试使用 CryptographyKey.from() 而不是 X25519PublicKey.from() – 没有用。
  3. getPublicKey() 函数返回一个带有 buffer: Uint8Array(32) [ … ] 的对象,而从 sodium.crypto_box_keypair( ) 返回一个带有 buffer: Uint8Array(32) [ … ], keyType: "x25519", publicKey: true 的对象。

概念基于:

  1. > https://github.com/paragonie/sodium-plus/blob/master/docs/SodiumPlus/sealed-boxes.md
  2. > https://dev.to/paragonie/message-encryption-in-javascript-and-php-cg9
  3. > https://stackoverflow.com/a/34058638

最佳答案

简短的回答是:升级到 0.5.0 或更高版本。

长答案是:等到版本 0.6.0 出来,然后升级到那个,因为它也放宽了您遇到的一些类型迂腐的限制。

关于javascript - 使用来自后端(PHP sodium)的公钥在前端(sodium-plus.js)加密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59161944/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com