如何在nodejs中使用SHA1加密

How to encrypt with SHA1 in nodejs?

本文关键字:SHA1 加密 nodejs      更新时间:2023-09-26

我有以下 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