Я не понимаю "зашифрованный" объект из библиотеки eccrypto

Я изучаю основы криптографии eccrypto - JavaScript Elliptic Curve. У меня есть следующий код из документации.

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".

Как я могу получить зашифрованный текст из этого объекта в двоичном формате?

1 ответ

Eccrypto (и любой другой библиотеке ECIES) эти параметры нужны для расшифровки данных. Вы можете узнать больше об "Интегрированной схеме шифрования" в этом обзоре. Вкратце "iv" - это вектор инициализации, который может быть случайным буфером или чем-то особенным, что вы можете создать самостоятельно. ephemPublicKey - буфер эфемерного открытого ключа отправителя. "ciphertext" - это зашифрованный буфер сообщения. Наконец, "mac" буфер помогает проверить целостность сообщения (контрольную сумму).

Если вы хотите сохранить эти зашифрованные данные, вы можете преобразовать их в шестнадцатеричный, base64 или любой другой тип строки, соответствующий вашим потребностям. Например, вы можете преобразовать этот объект в JSON, используяJSON.stringify(encrypted)а затем сохраните его как есть или преобразуйте в строку base64, чтобы занимать меньше места. Другое решение, которое уже применяется в некоторых других библиотеках, - объединить все эти буферы в один буфер, как этоBuffer.concat(encrypted.ephemPublicKey, encrypted.iv, encrypted.ciphertext, encrypted.mac).toString('base64') теперь, когда вы хотите расшифровать эту строку, вы должны сначала преобразовать ее обратно в буфер и разделить эти буферы.

Другие вопросы по тегам