最近使用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')