Dha*_*ngh 1 amazon-s3 amazon-web-services node.js amazon-kms aws-sdk-nodejs
我正在使用@aws-crypto/client-nodenpm 模块使用KMS密钥加密解密文件。但是当我运行以下代码时。我收到错误“配置中缺少凭据”
const {
KmsKeyringNode,
encrypt,
decrypt
} = require("@aws-crypto/client-node");
const encryptData = async (plainText, context) => {
try {
const {
result
} = await encrypt(keyring, plainText, {
encryptionContext: context
});
return result;
} catch (e) {
console.log(e);
}
};
encryptData('hello world', {
stage: "test",
purpose: "poc",
origin: "us-east-1"
})
Run Code Online (Sandbox Code Playgroud)
我可以看到这段代码有几个问题:
为了正确使用 AWS/KMS 来加密和解密数据,请查看下面的示例。(请注意,为了简单起见,此示例没有使用上下文,也没有使用您可以添加的其他密钥。此外,此示例还假设您也使用相同的密钥进行加密和解密)
const {
AMAZON_ENCRYPTION_KEY_ARN
} = process.env;
const awsCrypto = require('@aws-crypto/client-node');
const awsEncryptionClient = awsCrypto.buildClient(
awsCrypto.CommitmentPolicy.REQUIRE_ENCRYPT_REQUIRE_DECRYPT
);
const keyring = new awsCrypto.KmsKeyringNode({
generatorKeyId: AMAZON_ENCRYPTION_KEY_ARN
});
const encrypt = async (data) => {
try {
const { result } = await awsEncryptionClient.encrypt(keyring, data);
return result.toString('base64');
}
catch(err) {
console.log('Encryption error: ', err);
throw err;
}
};
const decrypt = async (encryptedData) => {
try {
const encryptedBuffer = Buffer.from(encryptedData, 'base64');
const { plaintext } = await awsEncryptionClient.decrypt(keyring, encryptedBuffer);
return plaintext.toString('utf8');
}
catch(err) {
console.log('Decryption error: ', err);
throw err;
}
};
module.exports = {
encrypt,
decrypt
};
Run Code Online (Sandbox Code Playgroud)
您可以使用上面的代码创建一个文件,并通过在其他地方导入该文件来调用函数。您将需要添加加密/解密密钥 arn。除了加密和解密之外,还添加了base64的编码和解码,因此最终结果适合存储(例如数据库)
有关其他代码示例,请查看此处。
| 归档时间: |
|
| 查看次数: |
759 次 |
| 最近记录: |