第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

TweetNaCl.js 最小公鑰簽名示例

TweetNaCl.js 最小公鑰簽名示例

白板的微信 2023-07-20 16:42:09
密碼學(xué)對我來說是非常新的東西,因此任何有關(guān)如何在 Node.js 中使用純 JavaScript 創(chuàng)建公鑰示例的基線示例將不勝感激!偽代碼:const nacl = require('tweetnacl')let message = "This is my unencrypted message"let naclPair = nacl.sign.keyPair()let signedMessage = nacl.sign(message, naclPair.secretKey)let decrypted = nacl.sign.open(signedMessage, naclPair.publicKey) // is this right?console.log(decrypted) // should this print the decrypted message?附帶說明一下,我對 node.jsrequire比對 ES6更熟悉import,如果這對這里的答案有任何影響并且可以幫助演示如何使用這個庫。
查看完整描述

2 回答

?
繁星coding

TA貢獻(xiàn)1797條經(jīng)驗(yàn) 獲得超4個贊

TweetNaCl.js是TweetNaCl的 JavaScript 端口。TweetNacl 又是NaCl的緊湊實(shí)現(xiàn),它提供了基本上基于Curve25519的各種加密和簽名算法。許多平臺都有 NaCl 兼容的實(shí)現(xiàn)或包裝器,因此這些文檔中的任何一個都可以用于介紹,例如Libsodium?fork 的清晰文檔。

TweetNaCl.js 的文檔還提供了功能的簡短概述:nacl.sign(message, secretKey)創(chuàng)建一條由 64 字節(jié)簽名和附加消息組成的簽名消息。nacl.sign.open(signedMessage, publicKey)使用簽名驗(yàn)證消息,如果驗(yàn)證成功則返回消息。用于簽名的算法是Ed25519。

正如評論中已經(jīng)指出的,您沒有明確區(qū)分加密(目的:保密)和簽名(目的:身份驗(yàn)證/完整性)。特別是,消息的保密性不是簽名的目的。例如,當(dāng)返回nacl.sign()包含未加密的消息時,這一點(diǎn)變得很明顯(請參見下面的代碼片段)。然而,確實(shí)在簽名過程中使用私鑰進(jìn)行了加密(但不是為了保密)。

以下實(shí)現(xiàn)是純 JavaScript 實(shí)現(xiàn):

var keyPair = nacl.sign.keyPair();

var secretKey? = keyPair.secretKey;

var publicKey = keyPair.publicKey;

var msgStr = "The quick brown fox jumps over the lazy dog";

var msg = nacl.util.decodeUTF8(msgStr);

var signature = nacl.sign(msg, secretKey);

var signatureB64 = nacl.util.encodeBase64(signature);

console.log(signatureB64.replace(/(.{64})/g,'$1\n')); // Display signature plus message (Base64 encoded)

var signatureMsgPart = signature.slice(64);?

console.log(nacl.util.encodeUTF8(signatureMsgPart));? // Display message from nacl.sign() return value: signing is not for encryption!

var verifiedMsg = nacl.sign.open(signature, publicKey);

console.log(nacl.util.encodeUTF8(verifiedMsg));? ? ? ?// Display message after successfull verification

<script src="https://cdn.jsdelivr.net/npm/tweetnacl-util@0.15.0/nacl-util.min.js"></script>

<script src="https://cdn.jsdelivr.net/npm/tweetnacl@1.0.1/nacl.min.js"></script>

并應(yīng)用軟件包tweetnacl-util-js進(jìn)行編碼。

順便說一句,在您發(fā)布的實(shí)現(xiàn)中,僅缺少 Utf8 編碼/解碼:

let message = "This is my unencrypted message"

let naclPair = nacl.sign.keyPair()

let signedMessage = nacl.sign(nacl.util.decodeUTF8(message), naclPair.secretKey)

let decrypted = nacl.sign.open(signedMessage, naclPair.publicKey) // is this right? -> Yes

console.log(nacl.util.encodeUTF8(decrypted)) // should this print the decrypted message? -> Yes, but the 'verified' message is printed!

<script src="https://cdn.jsdelivr.net/npm/tweetnacl-util@0.15.0/nacl-util.min.js"></script>

<script src="https://cdn.jsdelivr.net/npm/tweetnacl@1.0.1/nacl.min.js"></script>



查看完整回答
反對 回復(fù) 2023-07-20
?
慕工程0101907

TA貢獻(xiàn)1887條經(jīng)驗(yàn) 獲得超5個贊

順便說一句,使用示例頁面(公鑰簽名)來測試代碼需要使用nacl.sign.detached(message, secretKey)not?nacl.sign(msg, secretKey)??

查看完整回答
反對 回復(fù) 2023-07-20
  • 2 回答
  • 0 關(guān)注
  • 360 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號