2014-05-14 70 views
0

我正在使用標準節點crypto庫來生成HMAC MD5哈希。節點加密HMAC返回<SlowBuffer>而不是字符串

當我嘗試讀取散列值時,返回的對象是<SlowBuffer>而不是預期的String

下面是一個簡單的例子,但它給出了相同的結果:

var crypto = require('crypto'); 
var hmac = crypto.createHmac('md5', 'KEY'); 

hmac.write('something'); 
hmac.end(); 

var hash = hmac.read(); 

console.log(hash); 

//Outputs: <SlowBuffer 4c ec c5 6e 46 90 23 7a f1 2e 5a 78 35 21 6a 7a> 

是什麼原因造成的哈希類型強制轉換爲SlowBuffer類型?我怎樣才能避免這種脅迫,或者至少從緩衝區讀取原始值?

如果我通過hmac.setEncoding()設置散列的編碼值,它將<SlowBuffer 4c ec c5 6e 46 90 23 7a f1 2e 5a 78 35 21 6a 7a>作爲給定格式的字符串進行簡單編碼。同樣如此,我嘗試在緩衝區本身上調用toString('encoding')

+0

剛剛測試過,例如'console.log(hash.toString('base64'))'按預期工作。 –

回答

1

更仔細地閱讀crypto docs後,看來這實際上是預期:

如果沒有提供編碼,然後返回一個緩衝。

由於digest()方法贊成不贊成read()我跳過了這一點,並曾以爲如果指定沒有默認編碼將被使用。

解決方案只是hmac.setEncoding('hex')

相關問題