为什么节点AES128密码的输出长32个字节?

时间:2014-02-12 21:58:15

标签: node.js cryptography aes

这是我的代码:

var crypto = require('crypto')
function aese (key) {
    return crypto.createCipher('aes128', key)
}

var x1 = crypto.randomBytes(16)
var y1 = crypto.randomBytes(16)

var a = aese(y1)
a.write(x1)
a.end()
var ct = a.read()
console.log(ct.length); //should be 16 but is 32

1 个答案:

答案 0 :(得分:2)

这是由于填充增加了至少一个字节,16个字节至少提供了17个,由于块大小而填充到32个。

尝试将加密字节数减少到15,然后输出16个字节。

另一种选择是turn off padding;

var x1 = crypto.randomBytes(16)
var y1 = crypto.randomBytes(16)

var a = aese(y1)
a.setAutoPadding(false);   <--- turn of auto-padding
a.write(x1)
a.end()
var ct = a.read()
console.log(ct.length);    <--- gives 16 as output