我使用Azure KeyVault实现了blob加密(基于this tutorial)。
但有一点,我不完全理解,这是KeyResolver的确切目的。特别是:// In this case, we will not pass a key and only pass the resolver because
// this policy will only be used for downloading / decrypting.
BlobEncryptionPolicy policy = new BlobEncryptionPolicy(null, cloudResolver);
我认为我不需要KeyResolver,因为在应用程序启动时,我从KeyVault获取密钥并在UnityContainer上注册它,因此它可以在处理blob上传和下载的存储库中使用。我对么?或者我有什么遗失的东西?
答案 0 :(得分:0)
我认为我不需要KeyResolver,因为在应用程序启动时,我从KeyVault获取密钥并在UnityContainer上注册它,因此它可以在处理blob上传和下载的存储库中使用。我对么?或者我有什么遗失的东西?
根据我的理解,如果我们不想将密钥信息存储到KeyVault中,那么我们就不需要使用KeyResolver,我们可以使用密钥来加密和解密blob。
RsaKey key = new RsaKey("your private Key");
BlobEncryptionPolicy policy = new BlobEncryptionPolicy(key, null);
BlobRequestOptions options = new BlobRequestOptions() {
EncryptionPolicy = policy };
我们可以从this tutorial获取有关Key vs KeyResolver的更多信息。以下是tutorial的摘录。
在创建EncryptionPolicy对象时,用户只能提供一个Key(实现IKey),只能提供解析器(实现IKeyResolver)或两者。
IKey是使用密钥标识符标识的基本密钥类型,它提供了包装/解包的逻辑。 IKeyResolver用于在解密过程中解析密钥。它定义了一个ResolveKey方法,该方法在给定密钥标识符的情况下返回IKey。这使用户能够在多个位置管理的多个密钥之间进行选择。
- 对于加密,始终使用密钥,缺少密钥将导致错误。
- 用于解密: 如果指定获取密钥,则调用密钥解析器。如果指定了解析程序但没有键标识符的映射,则会引发错误。 如果未指定解析程序但指定了密钥,则在其标识符与所需密钥标识符匹配时使用密钥。如果标识符不匹配,则抛出错误。