Зашифровать сообщение с помощью AES-CBC с отступом PKCS#7, используя forge.js
Мне нужно подать заявку PKCS#7
заполнение данными, которые обрабатываются с помощью алгоритма AES-CBC. я использую forge
Lib. Вот мой в настоящее время рабочий код (без отступов):
// transform json data to bytes
var data = {foo: 'bar'};
var stringData = JSON.stringify(data);
var bytes = forge.util.createBuffer(stringData);
// generate 16-byte vector iv
var iv = forge.random.getBytesSync(16);
// ciphering process
var cipher = forge.cipher.createCipher('AES-CBC', key);
cipher.start({iv: iv});
cipher.update(bytes);
cipher.finish();
var encrypted = cipher.output;
Так что с теоретической точки зрения я знаю, что я должен добавить 1-16 байтов к моему bytes
переменная, прежде чем передать его aes
алгоритм. Этот вид операции встроен в forge
Lib? Если нет, может ли кто-нибудь помочь мне с реализацией применения отступа к сообщению?
1 ответ
Решение
Хотя документация не упоминает об этом, похоже, что по умолчанию для AES-CBC используется отступ PKCS#7. Смотрите эту ветку и комментарии cipherModes.js
modes.cbc.prototype.pad = function(input, options) {
// add PKCS#7 padding to block (each pad byte is the
// value of the number of pad bytes)