CNode

关于BAE云存储的签名算法

Sstraybird发布于13 年前最后回复13 年前2 回复5605 浏览0 收藏

最近使用BAE的时候需要往云存储上传文件,这需要提供签名串。

官方文档给出的PHP签名算法如下:

Signture = urlencode(base64_encode(hash_hmac('sha1', Content, SecretKey,true)))

Node.js下我尝试这样实现:

hash = require('crypto').createHmac('sha1', SecrectKey).update(content).digest('hex')
Signture = (new Buffer(hash)).toString('base64')

可是计算的结果跟BAE控制台给出的结果完全不同,请问该怎么写?

查看回复

回复 (2)

S
shiedman#1·13 年前

php:hash_hmac,见最后一个参数的说明。 因此与之等效的nodejs代码是

hash = require('crypto').createHmac('sha1', SecrectKey).update(content).digest()
Signture = hash.toString('base64')
S
straybird#2·13 年前
引用 shiedmanphp:hash hmac,见最后一个参数的说明。 因此与之等效的nodejs代码是

对了,谢谢。另外发现一个有趣的现象,谁能讲讲下面3种方式的差异吗?

hmac = require('crypto').createHmac('sha1', SecrectKey).update(content)

//test 1
hash = hmac.digest('hex')
Signture = (new Buffer(hash)).toString('base64')

//test 2
hash = hmac.digest('binary')
Signture = (hash).toString('base64')

//test 3
hash = hmac.digest()// output as buffer
Signture = (hash).toString('base64')
参与回复
登录后即可参与回复。登录