Метод cipher.setAAD() используется в Node.js для установки дополнительных аутентифицированных данных (AAD) для потока шифрования/дешифрования. AAD — это фрагмент данных, который прошел проверку подлинности, но не зашифрован. Это полезно для отправки данных вместе с зашифрованным сообщением, которое необходимо аутентифицировать, но не нужно хранить в секрете.
Синтаксис:
cipher.setAAD(aad[, options]);
Параметры: метод cipher.setAAD () принимает два параметра:
- aad: Buffer или TypedArray, содержащий дополнительные аутентифицированные данные для установки.
- options: (необязательно): объект, содержащий параметры для настройки AAD. Этот объект может включать свойство plaintextLength, указывающее длину данных открытого текста (в байтах), которые будут зашифрованы.
Пример 1. В приведенном ниже примере метод cipher.setAAD() используется для установки дополнительных аутентифицированных данных в аутентифицированные, но не зашифрованные данные. Когда данные зашифрованы, AAD будет аутентифицирован, но не будет включен в зашифрованные выходные данные.
Javascript
const crypto = require(
'crypto'
);
const iv = Buffer.alloc(16, 0);
const key = Buffer.alloc(32, 1);
const aad = Buffer.from(
'authenticated but not encrypted data'
);
const cipher = crypto.createCipheriv(
'aes-256-gcm'
, key, iv);
cipher.setAAD(aad);
const encrypted =
cipher.update(
'some secret data'
,
'utf8'
,
'hex'
) + cipher.final(
'hex'
);
console.log(encrypted);
Вывод:
02c5112376449247c35e9c3cea4242fd
Пример 2. В этом примере создается новый объект шифрования с использованием алгоритма aes-256-gcm и задаются некоторые дополнительные аутентифицированные данные (AAD) с помощью метода setAAD(). Затем он шифрует некоторые данные и генерирует тег аутентификации, используя метод getAuthTag(). В этом примере используется кодировка utf8 для входных и выходных данных, но вы можете использовать любой из поддерживаемых вариантов кодировки (например, hex, base64 и т. д.) в зависимости от ваших потребностей.
Javascript
const crypto = require(
'crypto'
);
async
function
main() {
// Generate a random key and iv
const key = crypto.randomBytes(32);
const iv = crypto.randomBytes(16);
// Create a new cipher object
const cipher = crypto.createCipheriv(
'aes-256-gcm'
, key, iv);
// Set the AAD (additional authenticated data)
cipher.setAAD(Buffer.from(
'some additional data'
));
// Encrypt some data
const encrypted = cipher.update
(
'some data to encrypt'
,
'utf8'
,
'hex'
);
encrypted += cipher.final(
'hex'
);
// Generate the authentication tag
const tag = cipher.getAuthTag();
// Create a new decipher object
const decipher = crypto.createDecipheriv(
'aes-256-gcm'
, key, iv);
// Set the AAD and authentication tag
decipher.setAAD(Buffer.from(
'some additional data'
));
decipher.setAuthTag(tag);
// Decrypt the data
const decrypted = decipher.update(encrypted,
'hex'
,
'utf8'
);
decrypted += decipher.final(
'utf8'
);
console.log(decrypted);
}
main();
Вывод:
some data to encrypt