获取错误消息"解码OAEP填充时发生错误"尝试从Azure表存储中检索实体时

时间:2017-01-25 22:28:30

标签: azure encryption azure-table-storage azure-tablequery

我正在以下列方式加密表格。

public TableRequestOptions EncryptTableStorage()
    {
        // Create the IKey used for encryption.
        var key = new RsaKey("mykey");

        var policy = new TableEncryptionPolicy(key, null);

        TableRequestOptions options = new TableRequestOptions()
        {
            EncryptionPolicy = policy
        };


        return options;

    }

我的加密实体

 [EncryptProperty]
 public string ConsumerId { get; set; }

在检索时,我使用以下代码

var query = new TableQuery<CloudModelDetail>().Where(TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, cloudModelDetail.PartitionKey));
foreach (var entity in azureStorageAccount.VerifyCloudTable.ExecuteQuery(query, azureStorageAccount.EncryptTableStorage()))
{
  Console.WriteLine("{0}, {1}\t{2}\t{3}", entity.PartitionKey, entity.RowKey,
                    entity.ConsumerId, entity.ScoreVariables);
}

我收到错误说解密错误。内部异常表示&#34;解码OAEP填充时发生错误。&#34;

2 个答案:

答案 0 :(得分:0)

我还尝试了您的代码和官方document代码。如果我们查询表中查询结果中只有一个实体,那么我们就可以正确获取解密信息。如果有多个实体,那么它将得到相同的错误“解码OAEP填充时出错”。如你所说。似乎SDK目前不支持一次查询更多实体。我们可以向Azure storage SDK项目报告我们的要求,也可以向我们的feedback Azure团队报告。

<强>更新

演示代码:

if (proc->is_from_method) {
    return vm_invoke_bmethod(th, proc, self, argc, argv, passed_block_handler);
}
else {
    return vm_invoke_proc(th, proc, self, argc, argv, passed_block_handler);
}

答案 1 :(得分:0)

更新:事实证明这不起作用;我无意中更改了禁用加密的内容。

我得到了Execute和ExecuteQuerySegmented的异常。对我来说,解决方案原来是设置密钥的激活日期(之前未设置 - 未选中复选框)。

Key Version Configuration