LocalKeyEncryptionKeyAsyncClient的用法

问题描述

我正在尝试将blob上传到azure blob存储,但我想使用客户端存储的密钥(而不是在Azure keyvault上)进行客户端加密。我想使用最新的Java SDK-v12。 我发现对于客户端加密,我应该使用EncryptedBlobClient类,该类通过EncryptedBlobClientBuilder实例化。 EncryptedBlobClientBuilder要求设置AsyncKeyEncryptionKey,我想使用存储在我这一边的密钥-LocalKeyEncryptionKeyAsyncclient是否用于这些需求?我在这堂课上找不到很多。 谢谢

解决方法

sample使用ResolveKeyAsync方法返回RsaKey。如果您不想将密钥存储到KeyVault中,则无需使用它,则可以随意使用密钥。

RsaKey rsa = new RsaKey("your private Key");

// Create the encryption policy to be used for upload and download.
BlobEncryptionPolicy policy = new BlobEncryptionPolicy(rsa,null);

// Set the encryption policy on the request options.
BlobRequestOptions options = new BlobRequestOptions();
options.setEncryptionPolicy(policy);

// Upload the encrypted contents to the blob.
blob.upload(stream,size,null,options,null);

有关更多详细信息,请参见类似的issue


更新

answer个类似问题。

JsonWebKey localKey = JsonWebKey.fromAes(new SecretKeySpec(encryptionKeyBytes,"AES"),Arrays.asList(KeyOperation.WRAP_KEY,KeyOperation.UNWRAP_KEY)).setId("my-id");

AsyncKeyEncryptionKey akek = new LocalKeyEncryptionKeyClientBuilder().buildAsyncKeyEncryptionKey(localKey).block();

EncryptedBlobClient encryptedBlobClient = new EncryptedBlobClientBuilder()
    .endpoint(serviceClient.getAccountUrl())
    .sasToken("<SAS token>")
    .containerName(containerName)
    .blobName(blobName)
    .key(akek,KeyWrapAlgorithm.A256KW.toString())
    .buildEncryptedBlobClient();

encryptedBlobClient.uploadFromFile(filepath);