我按照文档中的说明进行操作,并尝试在 Node 中执行相同的公式,但是,当我收到11|Session|
响应时,我无法正确地向服务器进行身份验证。我认为该错误是对错误设置的随机数和/或密码摘要的响应。
公式: Base64(SHA1($NONCE + $TIMESTAMP + SHA1($CLEARPASSWORD)))
变量:$CLEARPASSWORD=AMADEUS
, $TIMESTAMP=2015-09-30T14:12:15Z
, $NONCE=c2VjcmV0bm9uY2UxMDExMQ==
.
预期的哈希: +LzcaRc+ndGAcZIXmq/N7xGes+k=
我试过的代码是:
const crypto = require('crypto')
const hashedPassword = crypto.createHash('sha1').update(CLEARPASSWORD).digest() // Returns a buffer
crypto.createHash('sha1').update(NONCE + TIMESTAMP + hashedPassword).digest('base64') // Returns a Base64 String
但是,这将返回DDcZEaS5AtoVaZhsARy9MqV+Y34=
。如果我将 nonce 更改为它的普通 string secretnonce10111
,那么我得到的gHOoqyDb9YJBrk30iabSO8nKxio=
仍然是不正确的。
我不确定可能是什么问题。
我终于弄清楚出了什么问题。问题是我试图将字符串与缓冲区连接起来,而我应该从一开始就将所有内容都设置为缓冲区。
所以,而不是
const hashedPassword = crypto.createHash('sha1').update(CLEARPASSWORD).digest()
crypto.createHash('sha1').update(NONCE + TIMESTAMP + hashedPassword).digest('base64')
应该是
const buffer = Buffer.concat([Buffer.from(NONCE), Buffer.from(TIMESTAMP), nodeCrypto.createHash('sha1').update(CLEARPASSWORD).digest()])
const hashedPassword = nodeCrypto.createHash("sha1").update(buffer).digest("base64")
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句