存储数据时如何在 azure table 中加密 PartitionKey 和 RowKey?

How to encrypt PartitionKey and RowKey in an azure table when storing data?

我有一个包含多个列的 azure table,我能够成功加密这些列中的数据。我遇到的唯一问题是我无法加密 PartitionKey 和 RowKey。

我已经使用此文档https://docs.microsoft.com/en-us/azure/storage/common/storage-client-side-encryption 设置了加密。除 PartitionKey 和 RowKey 外,它工作正常。

[EncryptProperty]
public new string PartitionKey { get; set; }
[EncryptProperty]
public new string RowKey { get; set; }

已尝试上述方法,但未加密分区键和行键。

感谢任何帮助。

不支持分区键或行键列的加密。如果这些被加密,那么如果不扫描整个 table 就无法查询(由于每行中的唯一 IV)。此外,批处理请求取决于 predictable 分区键,范围查询取决于这些键的 predictable 排序。

我建议您将要加密的数据放入常规列中,并根据您想要的querying/batch属性选择分区键和行键。一种方法是构建数据的散列或签名。这允许点查询、分区扫描和批处理,但它不允许分区内的范围查询。

编辑:我应该说这个问题和答案仅适用于客户端 加密。服务器端加密无缝应用于所有静态数据。

不确定为什么这个答案被接受为正确答案。您可以用 c# 代码加密您的 Rowkey 并将其发送到 Table 存储。类似于:

BitConverter.ToString(MD5.Create().ComputeHash(Encoding.ASCII.GetBytes(RowKeyData)))
            .Replace("-", string.Empty)
            .ToLower();

然后您可以使用加密的 Rowkey 插入或替换实体。