【问题标题】:How do I decrypt a Nostr message?如何解密 Nostr 消息?
【发布时间】:2023-01-04 15:20:30
【问题描述】:

以下是向 Nostr Pubkey 发送私人消息的方法:

const crypto = require("crypto");
const secp = require("noble-secp256k1");

const ourPrivateKey = "";
const ourPubKey = "";
const theirPublicKey = "";
const text = "Hello World";

let sharedPoint = secp.getSharedSecret(ourPrivateKey, "02" + theirPublicKey);
let sharedX = sharedPoint.substr(2, 64);

let iv = crypto.randomFillSync(new Uint8Array(16));
var cipher = crypto.createCipheriv(
  "aes-256-cbc",
  Buffer.from(sharedX, "hex"),
  iv
);
let encryptedMessage = cipher.update(text, "utf8", "base64");
encryptedMessage += cipher.final("base64");
let ivBase64 = Buffer.from(iv.buffer).toString("base64");

let event = {
  pubkey: ourPubKey,
  created_at: Math.floor(Date.now() / 1000),
  kind: 4,
  tags: [["p", theirPublicKey]],
  content: encryptedMessage + "?iv=" + ivBase64,
};

console.log(event.content);

接收者一旦收到它如何解密?

【问题讨论】:

    标签: javascript node.js encryption secp256k1 nostr


    【解决方案1】:
    let encryptedMessageParts = event.content.split("?iv=");
    let senderMessage_enctrypted = encryptedMessageParts[0];
    let iv_ = Buffer.from(encryptedMessageParts[1], "base64");
    sharedPoint = secp.getSharedSecret(ourPrivateKey, "02" + theirPublicKey);
    sharedX = sharedPoint.substr(2, 64);
    var decipher = crypto.createDecipheriv(
      "aes-256-cbc",
      Buffer.from(sharedX, "hex"),
      iv_
    );
    let senderMessage_decrypted = decipher.update(
      senderMessage_enctrypted,
      "base64",
      "utf8"
    );
    senderMessage_decrypted += decipher.final("utf8");
    console.log(senderMessage_decrypted);
    

    您可以在此处阅读有关加密 DM 工作原理的更多信息:https://github.com/nostr-protocol/nips/blob/master/04.md

    【讨论】:

      猜你喜欢
      • 2021-09-30
      • 2021-04-21
      • 2016-08-19
      • 2021-12-29
      • 2016-02-10
      • 1970-01-01
      • 2020-08-05
      • 2023-03-05
      • 2016-08-28
      相关资源
      最近更新 更多