gpt4 book ai didi

python - 检查电子邮件的加密状态。

转载 作者:行者123 更新时间:2023-12-01 05:36:40 25 4
gpt4 key购买 nike

我最近一直在使用 gpg-mailgate,它几乎按照我想要的方式工作。

我的最后一个小障碍是如何可靠检查传入的电子邮件是否已经经过 pgp 加密。这是我看到的选项。

  1. 在 postfix 中添加一个使用 Mail::gpg.is_encrypted 的内容过滤器,如果消息返回 yes 则直接发送。如果没有,我可以将其发送到 gpg-mailgate 来处理。

  2. 从 gpg-mailgate 中调用一个小的 Perl 脚本,并再次调用 Mail::GPG.is_encrypted 并从那里开始。我看到了一些从 python 中调用 perl 的例子,我更喜欢这样做。

  3. 我可以通过查找 **BEGIN PGP MESSAGE**不可靠测试加密,但这绝不是一个很好的解决方案。

这就是我想出的全部。由于 gnupg python 包装器中没有任何内容可以对此进行测试,我想我将不得不考虑调用其他东西。

在前两种情况下我担心的是性能。我正在努力避免尽可能多的不必要的负担。

我愿意接受所有建议,谢谢。

最佳答案

通过电子邮件发送的 GPG 或其他 OpenPGP 消息应发送至 RFC 2015格式。检测起来非常简单、可靠且高效。

基本上,您只是检查 RFC822 header 是否具有如下所示的 Content-Type:

Content-Type: multipart/encrypted; boundary=whatever; protocol="application/pgp-encrypted"

实现此目的的理想方法是使用 Python 中的 emailmime 模块,或者使用 Perl 中的 CPAN 中您最喜欢的等效模块,但您可能可以使用以下命令更快地完成此操作精心设计的正则表达式。 (如果您选择这样做,请为 RFC822 header 查找预先测试的正则表达式,并在此基础上进行构建,因为在前 20 次这样做时,您会遇到 RFC822 的某些部分错误。续行、到处都是可选的空格,组件顺序可变、不区分大小写等)

<小时/>

但是如果有人只是将原始 OpenPGP 消息作为电子邮件文本发送怎么办?至少一些 MUA 会检测到这一点并将其视为正确的 OpenPGP 消息。他们是怎么做到的?基本上,按照您建议的方式:扫描 body 。

第一部分是获取 body 本身。如果他们只是使用纯文本邮件程序,或者不愚蠢的精美邮件程序,那么它只是非多部分 RFC 822 消息的正文,这很容易。但是,如果您想处理喜欢将所有内容都 HTML 化的邮件程序,则需要在扫描之前找到文本/纯文本部分。可靠或快速地做到这一点并不算太糟糕,但两者兼而有之?

现在,如何判断消息正文是否是 OpenPGP? RFC 4880描述了格式。特别是,请查看第 6.2 节有关 ASCII 装甲格式的内容。

但简单地说:查找装甲 header 行,-----BEGIN PGP MESSAGE-----,然后是零个或多个 RFC-822 header ,然后是一个空行,然后是一个数据 block 全部是基于 64 位的字符和空格,然后是装甲尾行 -----END PGP MESSAGE-----。为了安全起见,您可能希望在 header 和尾部之前和之后允许任意行(这不会使扫描变得更加困难)。任何匹配的内容都非常非常有可能是 OpenPGP 消息;任何不具备此功能的东西都不太可能与 GPG 一起使用。

<小时/>

这仍然无法处理人们可能使用的所有可能情况。如果有人将 OpenPGP 多部分消息分成两封电子邮件,拖放 OpenPGP 消息,使其邮件程序将其转换为附件而不是正文,粘贴二进制 OpenPGP 消息而不是 ASCII 装甲消息, ...

但我怀疑在明文正文中处理适当的 OpenPGP MIME 和原始 OpenPGP ASCII 装甲就足够了。

关于python - 检查电子邮件的加密状态。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18819126/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com