如何以解密格式从azure datatable获取加密的bot数据

如何以解密格式从azure datatable获取加密的bot数据,azure,botframework,Azure,Botframework,我使用机器人应用程序(visual C#)和机器人框架创建了QNA机器人。机器人状态数据存储在Azure数据表中。但是会话的数据(用户类型的数据)在Azure数据表中加密。我想解密。我怎样才能解密呢 会话的数据(用户类型数据)在Azure数据表中加密。我想解密。我怎样才能解密呢 如果要在存储会话数据后检索该数据,可以参考以下代码: context.ConversationData.SetValue<string>("testval", "hello world"); string

我使用机器人应用程序(visual C#)和机器人框架创建了QNA机器人。机器人状态数据存储在Azure数据表中。但是会话的数据(用户类型的数据)在Azure数据表中加密。我想解密。我怎样才能解密呢

会话的数据(用户类型数据)在Azure数据表中加密。我想解密。我怎样才能解密呢

如果要在存储会话数据后检索该数据,可以参考以下代码:

context.ConversationData.SetValue<string>("testval", "hello world");

string mes = "";

context.ConversationData.TryGetValue<string>("testval", out mes);
using Microsoft.Bot.Connector;
using Microsoft.WindowsAzure.Storage;
using Microsoft.WindowsAzure.Storage.Table;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.IO;
using System.IO.Compression;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace RetrieveHistory
{
    class Program
    {
        static void Main(string[] args)
        {
            CloudStorageAccount storageAccount = CloudStorageAccount.Parse("DefaultEndpointsProtocol=https;AccountName={your_account_name};AccountKey={your_account_key};EndpointSuffix=core.windows.net");

            CloudTableClient tableClient = storageAccount.CreateCloudTableClient();

            CloudTable table = tableClient.GetTableReference("{your_botconversationhistory_table_name}");

            TableQuery<MessageEntity> query = new TableQuery<MessageEntity>().Where(TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, "emulator|61b59bkmceee"));

            foreach (MessageEntity entity in table.ExecuteQuery(query))
            {
                string myactivity = "";
                using (var msi = new MemoryStream(entity.Activity0))
                using (var mso = new MemoryStream())
                {
                    using (var gs = new GZipStream(msi, CompressionMode.Decompress))
                    {
                        gs.CopyTo(mso);
                    }
                    myactivity = Encoding.UTF8.GetString(mso.ToArray());
                }

                Activity activity = JsonConvert.DeserializeObject<Activity>(myactivity);

                Console.WriteLine("{0}, {1}\t{2}\t{3}\t{4}", entity.PartitionKey, entity.RowKey,
                    entity.From, entity.Recipient, activity.Text);
            }



            Console.ReadLine();
        }



        public class MessageEntity : TableEntity
        {
            public MessageEntity(string pk, string rk)
            {
                this.PartitionKey = pk;
                this.RowKey = rk;
            }

            public MessageEntity() { }

            public string From { get; set; }

            public string Recipient { get; set; }

            public byte[] Activity0 { get; set; }
        }
    }
}
属性和类型:

实体示例:

注意:您可以创建一个控制台应用程序,安装以下软件包,并使用我提供的用于检索历史记录的代码进行测试

packages.config:



为什么要这样?你这样做的目的是什么?因为您可能不想直接从数据表中读取会话状态。如果您想在对话状态下保存某些内容并稍后阅读,那么有一些API可供使用。另外,数据表中保存的状态数据本身并没有加密。谢谢。我可以知道,{your_storage_account}是什么意思吗?将其替换为StorageConnectionString以通过WindowsAzure.storage sdk访问表。当我添加CloudStorageAccount、CloudTableClient、CloudTable、TableQuery、MessageEntity和QueryComparison时,我遇到了错误。那个么我能做些什么呢?你们安装了客户端库吗?带下划线的错误。没有此类类(CloudStorageAccount、CloudTableClient、CloudTable、TableQuery、MessageEntity和QueryComparisons)可添加。
<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="Microsoft.AspNet.WebApi.Client" version="5.2.3" targetFramework="net46" />
  <package id="Microsoft.AspNet.WebApi.Core" version="5.2.3" targetFramework="net46" />
  <package id="Microsoft.Azure.KeyVault.Core" version="1.0.0" targetFramework="net45" />
  <package id="Microsoft.Bot.Connector" version="3.13.1" targetFramework="net46" />
  <package id="Microsoft.IdentityModel.Logging" version="1.1.4" targetFramework="net46" />
  <package id="Microsoft.IdentityModel.Protocols" version="2.1.4" targetFramework="net46" />
  <package id="Microsoft.IdentityModel.Protocols.OpenIdConnect" version="2.1.4" targetFramework="net46" />
  <package id="Microsoft.IdentityModel.Tokens" version="5.1.4" targetFramework="net46" />
  <package id="Microsoft.Rest.ClientRuntime" version="2.3.2" targetFramework="net46" />
  <package id="Newtonsoft.Json" version="10.0.2" targetFramework="net45" />
  <package id="System.IdentityModel.Tokens.Jwt" version="5.1.4" targetFramework="net46" />
  <package id="WindowsAzure.Storage" version="9.1.0" targetFramework="net45" />
</packages>