【问题标题】:SHA1 hash differences between node.js and PHPnode.js 和 PHP 之间的 SHA1 哈希差异
【发布时间】:2015-08-18 14:55:57
【问题描述】:

我想将这部分 node.js 代码转换为 PHP 代码。 (工作中)

function generateHashedPass (password, salt) {
    var byteSalt = new Buffer(salt, 'base64');
    var bytePass = new Buffer(password, 'ucs2');
    var byteResult = Buffer.concat([byteSalt, bytePass]);
    return sha1.update(byteResult).digest('base64');
}

console.log(generateHashedPass('111111', 'UY68RQZT14QPgSsfaw/F+w==') === 'L0xc787MxCwJJaZjFX6MqxkVcFE=' ? "Algo correct" : "Algo wrong" );

现在我在 php 中有这样的东西:(不工作)

public function getHashedPass($pass, $salt) {
    $base_salt = unpack('H*', base64_decode($salt));     
    $base_pass = unpack('H*', mb_convert_encoding($pass, 'UCS-2', 'auto'));
    $base_result = $base_salt[1] . $base_pass[1];
    return base64_encode(sha1($base_result));
}

但是结果和node.js函数不一样。

结果应该是这样的: L0xc787MxCwJJaZjFX6MqxkVcFE=

当密码为: 111111

盐是: UY68RQZT14QPgSsfaw/F+w==

【问题讨论】:

  • 为什么不一步一步来......当使用相同的密码和slat时:byteSalt == $base_salt吗? bytePass == $base_pass 吗? byteResult == $base_result 吗?如果这些都正确,那么问题出在 sha1 或 base64 编码函数中。

标签: javascript php node.js base64 sha1


【解决方案1】:

试试这个:

//----------------------------------------------------
function getCharHex($aString) {

    $bytes  = str_split($aString, 2);
    $result = "";

    foreach ($bytes as $byte) {
        $result .=  chr(hexdec($byte));
    }

    return $result;
}


//----------------------------------------------------
function getHashedPass($pass, $salt) {

    $base_salt   = unpack('H*', base64_decode($salt)); 
    $base_pass   = unpack('H*', mb_convert_encoding($pass, 'UCS-2LE', 'auto'));
    $base_result = getCharHex($base_salt[1].$base_pass[1]);

    return base64_encode(sha1($base_result, true));
}


echo getHashedPass('111111', 'UY68RQZT14QPgSsfaw/F+w==');
//L0xc787MxCwJJaZjFX6MqxkVcFE=

【讨论】:

    猜你喜欢
    • 2013-04-18
    • 2011-08-08
    • 2010-11-02
    • 2018-08-24
    • 2023-03-22
    • 1970-01-01
    • 2013-08-10
    • 1970-01-01
    • 2011-10-27
    相关资源
    最近更新 更多