【问题标题】:How to format DKIM Header and body?如何格式化 DKIM 标题和正文?
【发布时间】:2020-03-26 12:27:54
【问题描述】:

我之前做过一个关于这个的问题,但仍然不明白该怎么做。

我需要为电子邮件制作规范化的标题和正文。我已经多次阅读这篇文档。有人可以举个例子吗,因为我无法理解这个:

3.4.1。 “简单”的标头规范化算法

“简单”标头规范化算法不会更改标头 任何方式的领域。标头字段必须提供给签名或 验证算法与消息中的完全相同 签名或验证。特别是,标题字段名称不得 大小写折叠且空格不得更改。

3.4.2。 “宽松”的标头规范化算法

“宽松”标头规范化算法必须应用 按顺序执行以下步骤:

  • 将所有标题字段名称(不是标题字段值)转换为 小写。例如,将“SUBJect: AbC”转换为“subject: AbC”。

  • 展开所有标题字段续行,如中所述 [RFC5322];特别是带有嵌入终止符的行 连续的头字段值(即 CRLF 序列后跟 WSP) 必须在没有 CRLF 的情况下进行解释。实现必须 不要删除头字段值末尾的 CRLF。

  • 将一个或多个 WSP 字符的所有序列转换为单个 SP 特点。此处的 WSP 字符包括 折线边界。

  • 删除每个展开的标题字段末尾的所有 WSP 字符 价值。

  • 删除冒号前后剩余的所有 WSP 字符 将标头字段名称与标头字段值分开。这 必须保留冒号分隔符。

3.4.3。 “简单”的身体规范化算法

“简单”正文规范化算法会忽略所有空行 在消息正文的末尾。空行是零线 删除行终止符后的长度。如果没有身体或 消息正文中没有尾随 CRLF,则添加 CRLF。它没有 对邮件正文的其他更改。用更正式的说法, “简单”正文规范化算法在最后转换“*CRLF” 将正文转换为单个“CRLF”。

请注意,完全空的或缺失的主体被规范化为 单曲“CRLF”;也就是说,规范化的长度将为 2 个八位字节。

空主体的 SHA-1 值(base64 格式)(规范化为 "CRLF") 是:

uoq1oCgLlTqpdDX/iUbLy7J1Wic=

SHA-256 值为:

frcCV1k9oG9oKj3dpUqdJg1PxRT2RSN/XKdLCPjaYaY=

3.4.4。 “宽松”的身体规范化算法

“宽松”正文规范化算法必须应用 依次执行(1)和(2)步骤:

  1. 减少空格:

    • 忽略行尾的所有空格。实现 不得删除行尾的 CRLF。

    • 将一行内的所有 WSP 序列减少为单个 SP 字符。

  2. 忽略邮件正文末尾的所有空行。 “空的 line”在第 3.4.3 节中定义。如果正文非空但 不以 CRLF 结尾,添加一个 CRLF。 (对于电子邮件,这是 仅在使用 SMTP 扩展或非 SMTP 传输时才有可能 机制。)

空主体的 SHA-1 值(base64 格式)(规范化为 空输入)是:

2jmj7l5rSw0yVb/vlWAYkK/YBwk=

SHA-256 值为:

47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=

3.4.5。规范化示例(信息性)

在以下示例中,实际空格仅用于 明晰。实际输入和输出文本使用指定 括号内的描述符:"<SP>" 用于空格字符,"<HTAB>" 用于 制表符,"<CRLF>" 用于回车/换行序列。 比如"X <SP> Y""X<SP>Y"代表同一个三个 字符。

示例 1:消息阅读:

A: <SP> X <CRLF>
B <SP> : <SP> Y <HTAB><CRLF>
                <HTAB> Z <SP><SP><CRLF>
<CRLF>
<SP> C <SP><CRLF>
D <SP><HTAB><SP> E <CRLF>
<CRLF>
<CRLF>

当对标头和标头使用宽松的规范化进行规范化时 正文导致标题读取:

a:X <CRLF>
b:Y <SP> Z <CRLF>

和正文阅读:

<SP> C <CRLF>
D <SP> E <CRLF>

示例 2:相同的消息使用简单规范化 标头和正文的规范化导致标头 阅读:

A: <SP> X <CRLF>
B <SP> : <SP> Y <HTAB><CRLF>
       <HTAB> Z <SP><SP><CRLF>

和正文阅读:

<SP> C <SP><CRLF>
D <SP><HTAB><SP> E <CRLF>

示例 3:使用宽松的标头规范化和处理时 简单的正文规范化,规范化的版本有一个标题 的:

a:X <CRLF>
b:Y <SP> Z <CRLF>

和正文阅读:

<SP> C <SP><CRLF>
D <SP><HTAB><SP> E <CRLF>

【问题讨论】:

  • 文档中提供的示例有什么问题?
  • 我不明白他们对那个结构的意思,我一遍又一遍地做了几个算法,但它们不起作用。
  • 我不知道为什么,但我不明白这个: A: X B : Y Z 我认识的几个人也看过 i,但他们也无法将其包裹起来。
  • 我想我需要一个真实的例子来理解它

标签: email smtp dkim canonicalization


【解决方案1】:

好的,让我们尝试将这些示例翻译成 C 字符串:

3.4.5。规范化示例(信息性)

在以下示例中,实际空格仅用于 明晰。实际输入和输出文本使用指定 括号内的描述符:"&lt;SP&gt;" 用于空格字符,"&lt;HTAB&gt;" 用于 制表符,"&lt;CRLF&gt;" 用于回车/换行序列。 比如"X &lt;SP&gt; Y""X&lt;SP&gt;Y"代表同一个三个 字符。

示例 1:消息阅读:

A: <SP> X <CRLF>
B <SP> : <SP> Y <HTAB><CRLF>
                <HTAB> Z <SP><SP><CRLF>
<CRLF>
<SP> C <SP><CRLF>
D <SP><HTAB><SP> E <CRLF>
<CRLF>
<CRLF>

翻译:

char *message = "A: X\r\nB : Y\t\r\n\tZ  \r\n\r\n C \r\nD \t E\r\n\r\n\r\n";

当对标头和标头使用宽松的规范化进行规范化时 正文导致标题读取:

a:X <CRLF>
b:Y <SP> Z <CRLF>

翻译:

char *headers = "a:X\r\nb:Y Z\r\n";

和正文阅读:

<SP> C <CRLF>
D <SP> E <CRLF>

翻译:

char *body = " C\r\nD E\r\n";

示例 2:相同的消息使用简单规范化 标头和正文的规范化导致标头 阅读:

A: <SP> X <CRLF>
B <SP> : <SP> Y <HTAB><CRLF>
       <HTAB> Z <SP><SP><CRLF>

翻译:

char *headers = "A: X\r\nB : Y\t\r\n\tZ  \r\n";

和正文阅读:

<SP> C <SP><CRLF>
D <SP><HTAB><SP> E <CRLF>

翻译:

char *body = " C \r\nD \t E\r\n";

示例 3:使用宽松的标头规范化和处理时 简单的正文规范化,规范化的版本有一个标题 的:

a:X <CRLF>
b:Y <SP> Z <CRLF>

翻译:

char *headers = "a:X\r\nb:Y Z\r\n";

和正文阅读:

<SP> C <SP><CRLF>
D <SP><HTAB><SP> E <CRLF>

翻译:

char *body = " C \r\nD \t E\r\n";

【讨论】:

    猜你喜欢
    • 2021-02-24
    • 1970-01-01
    • 2015-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-17
    • 1970-01-01
    • 2023-04-06
    相关资源
    最近更新 更多