关于BAE云存储的签名算法
发布于 2年前 作者 straybird 892 次浏览

最近使用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 回复

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

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

对了,谢谢。另外发现一个有趣的现象,谁能讲讲下面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')
回到顶部