前言
接【中篇】 ,在有一些場景下,我們需要對 ASP.NET Core 的加密方法進行擴展,來適應我們的需求,這個時候就需要使用到了一些 Core 提供的高級的功能。
本文還列舉了在集群場景下,有時候我們需要實現自己的一些方法來對Data Protection進行分布式配置。
加密擴展
IAuthenticatedEncryptor 和 IAuthenticatedEncryptorDescriptor
IAuthenticatedEncryptor是 Data Protection 在構建其密碼加密系統中的一個基礎的接口。
一般情況下一個key 對應一個IAuthenticatedEncryptor,IAuthenticatedEncryptor封裝了加密操作中需要使用到的秘鑰材料和必要的加密算法信息等。
下面是IAuthenticatedEncryptor接口提供的兩個 api方法:
Decrypt(ArraySegment<byte> ciphertext, ArraySegment<byte> additionalAuthenticatedData) : byte[]
Encrypt(ArraySegment<byte> plaintext, ArraySegment<byte> additionalAuthenticatedData) : byte[]
其中接口中的參數additionalAuthenticatedData表示在構建加密的時候提供的一些附屬信息。
IAuthenticatedEncryptorDescriptor接口提供了一個創建包含類型信息IAuthenticatedEncryptor實例方法。
CreateEncryptorInstance() : IAuthenticatedEncryptor
ExportToXml() : XmlSerializedDescriptorInfo
密鑰管理擴展
在密鑰系統管理中,提供了一個基礎的接口IKey,它包含以下屬性:
Activation
creation
expiration dates
Revocation status
Key identifier (a GUID)
IKey還提供了一個創建IAuthenticatedEncryptor實例的方法CreateEncryptorInstance。
IKeyManager接口提供了一系列用來操作Key的方法,包括存儲,檢索操作等。他提供的高級操作有:
•創建一個Key 并且持久存儲
•從存儲庫中獲取所有的 Key
•撤銷保存到存儲中的一個或多個鍵
XmlKeyManager
通常情況下,開發人員不需要去實現IKeyManager來自定義一個 KeyManager。我們可以使用系統默認提供的XmlKeyManager類。
XMLKeyManager是一個具體實現IKeyManager的類,它提供了一些非常有用的方法。
public sealed class XmlKeyManager : IKeyManager, IInternalXmlKeyManager{ public XmlKeyManager(IXmlRepository repository, IAuthenticatedEncryptorConfiguration configuration, IServiceProvider services); public IKey CreateNewKey(DateTimeOffset activationDate, DateTimeOffset expirationDate); public IReadOnlyCollection<IKey> GetAllKeys(); public CancellationToken GetCacheExpirationToken(); public void RevokeAllKeys(DateTimeOffset revocationDate, string reason = null); public void RevokeKey(Guid keyId, string reason = null);}
新聞熱點
疑難解答
圖片精選