使用 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)
我需要对使用 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)