使用Python的boto,我如何获取加密文件的内容?

时间:2015-08-14 00:32:48

标签: python amazon-web-services amazon-s3 boto

使用未加密的文件,我可以执行以下操作:

shaderResourceViewDesc.Format

但如果文件已加密,我需要更改一些内容。我无法通过阅读文档来弄清楚什么。我该怎么改变?

我知道主对称密钥,这是一个像30个字符长的字符串。

2 个答案:

答案 0 :(得分:2)

目前,没有任何版本的Boto支持客户端提供的密钥。相反,您可以使用AWS SDK。

一般过程如下:

  

下载对象时 - 客户端首先下载加密对象   来自Amazon S3的对象以及元数据。使用材料   在元数据中的描述中,客户端首先确定哪个主服务器   用于解密加密数据密钥的密钥。使用该主密钥,   客户端解密数据密钥并使用它来解密对象。   http://docs.aws.amazon.com/AmazonS3/latest/dev/UsingClientSideEncryption.html

以下是Java中的一个示例,它显示了密钥的创建,上传使用客户端密钥加密的文件,以及检索文件并使用客户端密钥解密:

KeyPairGenerator keyGenerator = KeyPairGenerator.getInstance("RSA");
keyGenerator.initialize(1024, new SecureRandom());
KeyPair myKeyPair = keyGenerator.generateKeyPair();

// Construct an instance of AmazonS3EncryptionClient
AWSCredentials credentials = new BasicAWSCredentials(myAccessKeyId, mySecretKey);
EncryptionMaterials encryptionMaterials = new EncryptionMaterials(myKeyPair);
AmazonS3EncryptionClient s3 = new AmazonS3EncryptionClient(credentials, encryptionMaterials);

// Then just use the S3 client as normal...
//
// When we use the putObject method, the data in the file or InputStream
// we specify is automatically encrypted on the fly as it's uploaded to Amazon S3.
s3.putObject(bucketName, key, myFile);

// When you use the getObject method, the data retrieved from Amazon S3
// is automatically decrypted on the fly.
S3Object downloadedObject = s3.getObject(bucketName, key);

从这里使用/改编的来源:http://aws.amazon.com/articles/2850096021478074

在Python中,没有AWS"支持" 。例如。存在Boto选项。但是,确实存在一个Boto的包装器库,它提供了使用客户端侧密钥加密/解密的功能:这个库:https://pypi.python.org/pypi/s3-encryption/0.1.0

答案 1 :(得分:0)

如果这是AWS为您加密的文件(通过在boto中设置标志来打开加密),那么您不必再做任何其他操作。 S3透明地加密和解密内容。它们在S3内部加密,但在程序中清晰可见。所以相同的代码可以工作。