この場合、他の方法がありますか?
私が知る限り、紺碧のストレージには2つの暗号化があります。
1つはserver-side encryptionです。Azure Storageは、保存前にデータを自動的に暗号化し、取得前に復号化します。暗号化、復号化、および鍵管理は、ユーザーには完全に透過的です。
この方法を使用すると、Azureはストレージサーバーにアップロードするときにデータを暗号化します。 これは、ユーザーがアクセスしたいときにデータを復号化します。
あなたが直接、以下のようにポータルでそれを可能にすることができる:
もう一つは、クライアント側の暗号化では、我々はデータを暗号化するために、紺碧のキー値またはローカルキーの値を使用することができます。
クライアントサイドの暗号化を使用する場合は、BLOBからファイルをダウンロードし、暗号化して別のストレージアカウントにアップロードする必要があります。
This is the client-side Encryption without use azure key-value way.
私たちは、あなたがローカルでこのRSA鍵を格納することができ、それを暗号化するローカルのRSAキーを作成することができます。
BLOBから暗号化されたコンテンツを復号化する場合は、rsaキーを使用できます。
詳細は、あなたがサンプルの下を参照できます。
LocalResolver.cs
public class LocalResolver : IKeyResolver
{
private Dictionary<string, IKey> keys = new Dictionary<string, IKey>();
public void Add(IKey key)
{
keys[key.Kid] = key;
}
public async Task<IKey> ResolveKeyAsync(string kid, CancellationToken token)
{
IKey result;
keys.TryGetValue(kid, out result);
return await Task.FromResult(result);
}
}
アップロード暗号化ブロブとダウンロード復号化ブロブ(iKeyを格納するために使用されます):
static void Main(string[] args)
{
Console.WriteLine("Blob encryption sample");
// Retrieve storage account information from connection string
// How to create a storage connection string - https://azure.microsoft.com/en-us/documentation/articles/storage-configure-connection-string/
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(
"DefaultEndpointsProtocol=https;AccountName=brandofirststorage;AccountKey=4j8EjQzNtkzQ22Xp3NZcxvJz/+PUOOOQRTSZ9TieQg1lYM6eBCDpKoJgMcNWoG6p1GjMQhkYrxPKRBralzQoZA==;EndpointSuffix=core.windows.net");
CloudBlobClient client = storageAccount.CreateCloudBlobClient();
CloudBlobContainer container = client.GetContainerReference("example");
container.CreateIfNotExists();
int size = 5 * 1024 * 1024;
byte[] buffer = new byte[size];
Random rand = new Random();
rand.NextBytes(buffer);
CloudBlockBlob blob = container.GetBlockBlobReference("test");
// Create the IKey used for encryption.
RsaKey key = new RsaKey("private:key1");
// Create the encryption policy to be used for upload.
BlobEncryptionPolicy uploadPolicy = new BlobEncryptionPolicy(key, null);
// Set the encryption policy on the request options.
BlobRequestOptions uploadOptions = new BlobRequestOptions() { EncryptionPolicy = uploadPolicy };
Console.WriteLine("Uploading the encrypted blob.");
// Upload the encrypted contents to the blob.
using (MemoryStream stream = new MemoryStream(buffer))
{
blob.UploadFromStream(stream, size, null, uploadOptions, null);
}
// Download the encrypted blob.
// For downloads, a resolver can be set up that will help pick the key based on the key id.
LocalResolver resolver = new LocalResolver();
resolver.Add(key);
BlobEncryptionPolicy downloadPolicy = new BlobEncryptionPolicy(null, resolver);
// Set the decryption policy on the request options.
BlobRequestOptions downloadOptions = new BlobRequestOptions() { EncryptionPolicy = downloadPolicy };
Console.WriteLine("Downloading the encrypted blob.");
// Download and decrypt the encrypted contents from the blob.
using (MemoryStream outputStream = new MemoryStream())
{
blob.DownloadToStream(outputStream, null, downloadOptions, null);
}
Console.WriteLine("Press enter key to exit");
Console.ReadLine();
}
を
さらに、コピーブロブ操作では、単にサーバー側のソースからターゲットにバイトをコピーします。したがって、サーバーがファイルをコピーするときには暗号化されません。
Hrm。それはうまくいくかもしれない。私はそれを試して、今日ここに報告します。 –
これを読んだあと、これはまだ2部構成であるように見えます。まず、データをどこかで(ディスク上のファイルのように)ダウンロードして暗号化して保存する必要があります。次に、そのファイルを2番目のBLOB格納場所にアップロードする必要があります。 –
答えを更新します。 –