我正在使用AWS KMS将文件加密到s3存储桶。我目前正在使用AWS控制台执行此操作,但我想使用Nodejs执行此操作。
我刚刚查看了一些内容,但我对使用nodejs进行KMS加密和解密没有任何明确的想法。
答案 0 :(得分:5)
您需要查看AWS SDK for javascript。从示例:
(!empty($userId)) { .... }
以下是aws-sdk package on NPM的链接。 以下是main AWS SDK for Javascript documentation page的链接。
希望这有帮助!
答案 1 :(得分:1)
这是有关如何使用AWS KMS进行加密和解密的完整示例
// Imports
const AWS = require('aws-sdk');
const helper = require('./helper');
AWS.config.update({ region: 'eu-west-3' })
// Declare local variables
const kms = new AWS.KMS();
helper.getTextFile('./test.txt')
.then(buffer => encryptData(buffer))
.then(encryptedData => helper.saveBlobToFile(encryptedData))
.then(data => helper.getTextFile('./encryptedTxt.txt'))
.then(buffer => decryptData(buffer))
.then(plainText => helper.saveBlobToFile(plainText)) // plaintext
.catch(console.log);
function encryptData(buffer) {
const params = {
KeyId: 'your key id',
Plaintext: buffer
}
return new Promise((resolve, reject) => {
kms.encrypt(params, (err, data) => {
if(err) reject(err);
else resolve(data.CiphertextBlob);
})
})
}
function decryptData(buffer) {
const params = {
CiphertextBlob: buffer
}
return new Promise((resolve, reject) => {
kms.decrypt(params, (err, data) => {
if(err) reject(err);
else resolve(data.Plaintext);
})
})
}
辅助方法在这里:
const glob = require('glob')
const fs = require('fs')
function getTextFile(filePath) {
return new Promise((resolve, reject) => {
fs.readFile(filePath, (err, data) => {
if(err) reject(err);
else {
resolve(data);
}
});
})
}
function saveBlobToFile(blob) {
var buffer = Buffer.from(blob, 'base64'); // decode
return new Promise((resolve, reject) => {
fs.writeFile('encryptedTxt.txt', buffer, (err) => {
if(err) reject(err);
else resolve('file saved correctly');
})
})
}
module.exports = {
getTextFile,
saveBlobToFile
}