2014-02-12 87 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 
相關問題