gpt4 book ai didi

node.js - 使用带有对称 key 加密的 unload 命令解密卸载的 s3 文件

转载 作者:太空宇宙 更新时间:2023-11-04 01:57:29 25 4
gpt4 key购买 nike

我尝试从 s3 解密一个文件,该文件是通过 redshift 的 unload 命令使用 AES 对称 key 加密上传的。如果我们使用 AWS java sdk 来下载,并使用提供给 s3 客户端的 aes key ,它可以正常工作。但是,如果我们在下载文件后尝试手动解密它,它会给出 javax.crypto.BadPaddingException: Given final block not properly padded错误。

手动解密文件的原因是我想使用node.js解密文件,据我所知,node中没有可以直接执行此操作的sdk。

我尝试过的 Node.js 代码:

var AWS = require('aws-sdk');
var fs = require('fs');
var crypto = require('crypto');
var CryptoJS = require("crypto-js");

var algorithm = 'aes256';
var inputEncoding = 'hex';
var outputEncoding = 'utf-8';

var key = "symmetric key base 64"; //prod

var data = fs.readFileSync('/tmp/files/myfile');
console.log(data);

var decipher = crypto.createDecipher(algorithm,key);

var deciphered = decipher.update(data, inputEncoding, outputEncoding);
console.log(deciphered);
deciphered += decipher.final(outputEncoding);
console.log(deciphered);

当我尝试此操作时,我收到此错误:Error: error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt

最佳答案

因此,Redshift 使用信封加密的方式与 AWS SDK 使用信封加密在 S3 上存储文件的方式相同。因此,为了解密文件,您应该:

  1. 从 S3 对象元数据中获取加密的数据 key 和 iv(分别为 x-amz-meta-x-amz-key 和 x-amz-meta-x-amz-iv)
  2. 使用 AES256 ECB 模式使用对称 key 解密 x-amz-meta-x-amz-key 值 => var decipher = crypto.createDecipheriv('AES-128-ECB',key,'');

  3. 然后使用 AES256 CBC 模式解密“0000_part_00”,其中 iv 设置为步骤 1 中的 iv, key 设置为步骤 2 的结果。=> crypto.createDecipheriv('aes-128-cbc', key, iv)

  4. 删除填充(如果 Node.js Crypo, what's the default padding for AES? 正确,应该能够使用 cipher.setAutoPadding(true))

我还没有在nodejs中编码,但我已经在Python中成功使用了这些步骤 step2 step 3+4

关于node.js - 使用带有对称 key 加密的 unload 命令解密卸载的 s3 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47322297/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com