[英]How to encrypt with SHA1 in nodejs?
我有以下bash腳本:
#!/bin/bash
file="$1"
bucket="mybucket"
resource="/${bucket}/${file}"
contentType="image/png"
dateValue="Thu, 10 Mar 2016 04:13:24 +0545"
stringToSign="PUT\n\n${contentType}\n${dateValue}\n${resource}"
vs3Key="AKXXXXXXXXXXXXXXXXXXX"
s3Secret="/Wxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
signature=`echo -en ${stringToSign} | openssl sha1 -hmac ${s3Secret} -binary | base64`
echo $signature
我想在nodejs中編寫相同的代碼。 這是我到目前為止編寫的內容,但是簽名無效:
'use strict';
var secret= '/Wxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';
var file = process.argv[2];
var crypto = require('crypto');
var dateValue = 'Thu, 10 Mar 2016 04:13:24 +0545';
var bucket = "mybucket";
var resource = "/" + bucket + "/" + file;
var contentType = "image/png";
var stringToSign = "PUT\n\n"+contentType+"\n"+dateValue+"\n"+resource;
var s3Key = "AKxxxxxxxxxxxxxxxxxxxxxxxxxxx";
var hmac = crypto.createHmac("sha1", secret).update(stringToSign).digest('hex');
console.log(new Buffer(hmac).toString('base64'));
您的bash代碼正在使用-binary
參數調用openssl
,因此您應該在JS代碼中執行相同的操作。
根據文檔 :
hash.digest([encoding])
計算傳遞給所有要散列的數據的摘要(使用
hash.update()
方法)。encoding
可以是'hex'
,'binary'
或'base64'
。 如果提供了encoding
將返回一個字符串; 否則返回Buffer
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.