【问题标题】:I don't understand the "encrypted" object from eccrypto library我不明白 eccrypto 库中的“加密”对象
【发布时间】:2019-09-21 20:42:53
【问题描述】:

我正在学习 eccrypto - JavaScript 椭圆曲线密码库的基础知识。我从文档中获得了以下代码。

var eccrypto = require("eccrypto");
    
var privateKeyA = eccrypto.generatePrivate();
var publicKeyA = eccrypto.getPublic(privateKeyA);
    
// Encrypting the message for A.
eccrypto.encrypt(publicKeyA, Buffer.from("msg to a")).then(function (encrypted) {
    console.log(encrypted)
    // A decrypting the message.
    eccrypto.decrypt(privateKeyA, encrypted).then(function (plaintext) {
    console.log("Message to part A:", plaintext.toString());
    });
});

恐怕我无法正确理解“加密”对象的密钥。

该对象中有四个键:“iv”、“ephemPublicKey”、 “密文”和“mac”。

如何从该对象中获取二进制格式的加密文本?

【问题讨论】:

  • 您将加密文本作为函数的参数,在.then(...); 部分提供。

标签: javascript ecies


【解决方案1】:

eccrypto(和任何其他 ECIES 库)需要这些参数来解密数据。您可以在this survey 中阅读有关“集成加密方案”的更多信息。简而言之,“iv”是初始化向量,可以是随机缓冲区或您可以自己生成的特殊内容。 “ephemPublicKey”是发送者的临时公钥缓冲区。 “密文”是加密的消息缓冲区。最后,“mac”缓冲区有助于检查消息的完整性(校验和)。

如果您想存储这些加密数据,您可以将它们转换为十六进制或 base64 或任何适合您需要的字符串类型。例如,您可以使用JSON.stringify(encrypted) 将此对象转换为 JSON,然后按原样存储或将其转换为“base64”字符串以占用更少的空间。已经在其他一些库中应用的另一种解决方案是将所有这些缓冲区连接到一个缓冲区中,例如 Buffer.concat(encrypted.ephemPublicKey, encrypted.iv, encrypted.ciphertext, encrypted.mac).toString('base64') 现在当您想要解密此字符串时,您应该首先将其转换回缓冲区并拆分这些缓冲区。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-21
    • 1970-01-01
    相关资源
    最近更新 更多