2014-02-12 47 views
1

这是我的代码:为什么节点AES128密码的输出长度为32字节?

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

什么是'temp'? –

+0

如果我不得不猜测,我会说这是一个IV。 – delnan

+0

对不起,应该是'ct' – stanm87

回答

2

这是由于在使至少17出被填充到32由于块大小,增加了至少一个字节,16个字节的填充。

尝试将加密字节的数量减少到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 
相关问题