使用 forge.js 使用 PKCS#7 填充使用 AES-CBC 加密消息

encrypt message with AES-CBC with PKCS#7 padding using forge.js

我需要对使用 AES-CBC 算法消化的数据应用 PKCS#7 填充。我使用 forge 库。这是我当前的工作代码(没有填充):

// 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;

所以从理论的角度来看,我知道在将 bytes 变量传递给 aes 算法之前,我应该将 1-16 个字节附加到我的 bytes 变量。 forge库中是否内置了这种操作?如果没有,有人可以帮我实现对消息的填充应用吗?

虽然文档没有提及,但似乎 AES-CBC 的默认填充是 PKCS#7。参见 this thread and the comments of 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)