使用端到端加密时,如何在聊天中实现消息的搜索功能?

问题描述

如果我在编写的聊天应用程序中添加了端到端加密,那么我将无法读取服务器端交换的消息的内容,因此,如果我想保留消息搜索功能,则需要以另一种方式实现它。

正确的最佳做法是什么?

我考虑了以下可能性:

  1. 在将以未加密格式存储邮件的每台设备上存储本地数据库(例如sqlite)。

    但这有一些缺点:除了 邮件未加密存储,可通过网络访问该应用 浏览器,在这种情况下,我无法存储整个对话 在浏览器的会话存储中(我什至不认为它们会 适合)。

    而且,这样我就不再有独特的真理来源 (必须处理存储加密消息的服务器端数据库以及本地 未加密的“设备端” sqlite数据库)。

    所以,我认为这不是可行的方法

  2. 在客户端(无论是Web浏览器还是设备)上,当用户在聊天中执行搜索时,下载该聊天的所有消息,将其全部解密,然后执行内存中搜索。 / p>

    缺点:我必须下载所有聊天记录才能 执行搜索。如果聊天源远流长, 所有数据都无法放入内存。下载历史记录后,我可以将其存储在内存中,直到用户重新加载页面(如果使用Web浏览器)或杀死并重新启动应用程序(如果使用智能手机或平板电脑之类的设备)为止。

    优点:我可以显示找到搜索词的消息数量

  3. 与2相同,但我将对服务器执行多个请求,每个请求仅获取聊天消息的一小部分,例如当用户搜索“ foo”时,最初,我将向服务器询问最后30条消息,在客户端上对其解密,搜索“ foo”,仅在此块中显示结果和包含“ foo”的消息数当用户滚动或按下“搜索更多”按钮时,执行另一个请求,该请求将提取另外30条消息,将它们添加到结果中,并在考虑到第n条消息之后增加匹配消息的计数。 / p>

    缺点:第一次搜索时,我无法显示匹配消息的总数。

  4. 还有其他吗?也许是一个更好的解决方案,也可以由Telegram或WhatsApp之类的其他服务使用(我知道它们都为聊天提供端到端加密)。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)