2016-12-16 80 views
1

我用下面的PHP代碼計算SHA1:在Node.js的計算SHA1返回不同的結果比在PHP

$hash = base64_encode(sha1($password.$key, true).$key); 

但我這樣做是Node.js的時候,它並沒有給我同樣的結果:

var hash = crypto.createHash('sha1').update(password + key).digest('base64'); 

爲什麼結果不同?

回答

0

在你的PHP代碼,你要追加的關鍵SHA1它傳遞給base64前:

sha1($password.$key, true).$key 

爲了複製在Node.js的,你需要做的是相同的:

var hash = crypto.createHash('sha1').update(password + key).digest('hex'); 
var result = new Buffer(hash + key).toString('base64'); 

編輯:PHP docs on sha1後,它看起來像被傳遞到sha1第二個參數是要返回非十六進制數據:

如果可選raw_output設置爲TRUE,則sha1摘要將以原始二進制格式返回,長度爲20,否則返回值爲40個字符的十六進制數。

因此,爲了使這兩個片段的功能一樣,你想也需要修改PHP不傳遞參數:

$hash = base64_encode(sha1($password.$key).$key); 
+0

繼續給出不同的結果 – GENTEBETA

+0

@GENTEBETA嘗試從您的PHP函數中刪除第二個「true」參數? –

+0

@GENTEBETA第二個參數將使PHP返回一個未編碼的字符串而不是十六進制字符串。 –

0

您需要在對的NodeJS追加鍵:

// php 
$hash = base64_encode(sha1($password.$key, true).$key); 
            // see this ^^^^ 

// node 
var hash = crypto.createHash('sha1').update(password + key).digest('base64') + key; 
                   // add this ^^^^^^ 
相關問題