0

我正在学习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”、“ciphertext”和“mac”。

如何以二进制格式从此对象中获取 cncrypted 文本?

4

1 回答 1

1

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

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

于 2020-07-03T12:18:49.533 回答