我用下面的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');
爲什麼結果不同?
我用下面的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');
爲什麼結果不同?
在你的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);
您需要在對的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 ^^^^^^
繼續給出不同的結果 – GENTEBETA
@GENTEBETA嘗試從您的PHP函數中刪除第二個「true」參數? –
@GENTEBETA第二個參數將使PHP返回一個未編碼的字符串而不是十六進制字符串。 –