<PackageReference Include="Azure.Storage.Blobs" Version="12.24.1" />

CustomerProvidedKey

Wrapper for an encryption key to be used with client provided key server-side encryption.
using System; using System.Runtime.CompilerServices; using System.Security.Cryptography; namespace Azure.Storage.Blobs.Models { public readonly struct CustomerProvidedKey : IEquatable<CustomerProvidedKey> { public string EncryptionKey { get; } public string EncryptionKeyHash { get; } public EncryptionAlgorithmType EncryptionAlgorithm { get; } public CustomerProvidedKey(string key) { EncryptionKey = key; EncryptionAlgorithm = EncryptionAlgorithmType.Aes256; using (SHA256 sHA = SHA256.Create()) { byte[] inArray = sHA.ComputeHash(Convert.FromBase64String(key)); EncryptionKeyHash = Convert.ToBase64String(inArray); } } public CustomerProvidedKey(byte[] key) { this = new CustomerProvidedKey(Convert.ToBase64String(key)); } public override bool Equals(object obj) { if (obj is CustomerProvidedKey) { CustomerProvidedKey other = (CustomerProvidedKey)obj; return Equals(other); } return false; } public override int GetHashCode() { return EncryptionKey.GetHashCode() ^ EncryptionKeyHash.GetHashCode() ^ EncryptionAlgorithm.GetHashCode(); } public static bool operator ==(CustomerProvidedKey left, CustomerProvidedKey right) { return left.Equals(right); } public static bool operator !=(CustomerProvidedKey left, CustomerProvidedKey right) { return !(left == right); } public bool Equals(CustomerProvidedKey other) { if (EncryptionKey == other.EncryptionKey && EncryptionKeyHash == other.EncryptionKeyHash) return EncryptionAlgorithm == other.EncryptionAlgorithm; return false; } public override string ToString() { DefaultInterpolatedStringHandler defaultInterpolatedStringHandler = new DefaultInterpolatedStringHandler(8, 7); defaultInterpolatedStringHandler.AppendLiteral("["); defaultInterpolatedStringHandler.AppendFormatted("CustomerProvidedKey"); defaultInterpolatedStringHandler.AppendLiteral(":"); defaultInterpolatedStringHandler.AppendFormatted("EncryptionKey"); defaultInterpolatedStringHandler.AppendLiteral("="); defaultInterpolatedStringHandler.AppendFormatted(EncryptionKey); defaultInterpolatedStringHandler.AppendLiteral(";"); defaultInterpolatedStringHandler.AppendFormatted("EncryptionKeyHash"); defaultInterpolatedStringHandler.AppendLiteral("="); defaultInterpolatedStringHandler.AppendFormatted(EncryptionKeyHash); defaultInterpolatedStringHandler.AppendLiteral(";"); defaultInterpolatedStringHandler.AppendFormatted("EncryptionAlgorithm"); defaultInterpolatedStringHandler.AppendLiteral("="); defaultInterpolatedStringHandler.AppendFormatted(EncryptionAlgorithm); defaultInterpolatedStringHandler.AppendLiteral("]"); return defaultInterpolatedStringHandler.ToStringAndClear(); } } }