Perl MIME工具:主体部分的内容更改

Perl MIME工具:主体部分的内容更改,perl,mime,Perl,Mime,我为mime解析器(mytest)提供了以下示例输入 代码是这样的(只需读入并再次写出即可) 生成的输出(mytestnew)如下所示 正如我们所看到的,第1部分的内容发生了变化(参见VUVU…换行符) 如果签名(第二部分)用于验证内容,则会出现问题。可能是因为base64编码不“漂亮”。但签名的验证并不关心这一点。它只是看到一个损坏的内容和失败。 在我的样本中,我剪下了签名——问题不是验证 那么,我如何解析内容,用MIME工具再次写出,并保持内容不变呢 谢谢你的帮助 来自: 不要计划打印您解析

我为mime解析器(mytest)提供了以下示例输入

代码是这样的(只需读入并再次写出即可)

生成的输出(mytestnew)如下所示

正如我们所看到的,第1部分的内容发生了变化(参见VUVU…换行符)

如果签名(第二部分)用于验证内容,则会出现问题。可能是因为base64编码不“漂亮”。但签名的验证并不关心这一点。它只是看到一个损坏的内容和失败。 在我的样本中,我剪下了签名——问题不是验证

那么,我如何解析内容,用MIME工具再次写出,并保持内容不变呢

谢谢你的帮助

来自:

不要计划打印您解析的内容

解析是(轻微的)有损操作。因为像这样的事情 在base64编码中存在歧义,下面的内容将不会给出 其输入在所有情况下均保持不变:

$entity = $parser->parse(\*STDIN);
$entity->print(\*STDOUT);
如果您使用MIME::Tools处理电子邮件,请记住保存 如果要以不变的方式发送所分析的数据。这对我们来说至关重要 比如PGP签名的电子邮件

从:

不要计划打印您解析的内容

解析是(轻微的)有损操作。因为像这样的事情 在base64编码中存在歧义,下面的内容将不会给出 其输入在所有情况下均保持不变:

$entity = $parser->parse(\*STDIN);
$entity->print(\*STDOUT);
如果您使用MIME::Tools处理电子邮件,请记住保存 如果要以不变的方式发送所分析的数据。这对我们来说至关重要 比如PGP签名的电子邮件


两个字符串上的
base64-d
返回相同的输出。如果将其解析到内存中并写出解析后的表示形式,则不能期望输出相同(除非解析的格式非常严格,表示形式不可能发生变化)。我认为如果你的签名生成是基于MIME表示,而不是实际内容,那么它首先就被破坏了,但我不熟悉PKCS7。两个字符串上的
base64-d
返回相同的输出。如果将其解析到内存中并写出解析后的表示,则无法期望输出相同(除非解析的格式非常严格,表示形式不可能发生变化)。我认为如果签名生成是在MIME表示而不是实际内容上进行操作,那么它首先就被破坏了,但是我不熟悉PKCS7。
Content-Type: multipart/signed; protocol="application/pkcs7-signature"; micalg=sha1; boundary="----=_Part_abc123"

------=_Part_abc123
Content-Type: application/text; name=test.txt
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename=test.txt

VUVUVUVUVUVUVUVUVUVUVUVUVUVUVUVUVUVUVUVUVUVUVUVUVUVUVUVUVUVU
VUVUVUVUVUVUVUVUVUVUVUVUVUVUVUVUVUVU

------=_Part_abc123
Content-Type: application/pkcs7-signature; name=smime.p7s; smime-type=signed-data
Content-Transfer-Encoding: binary
Content-Disposition: attachment; filename="smime.p7s"
Content-Description: S/MIME Cryptographic Signature

blabla
------=_Part_abc123--
$entity = $parser->parse(\*STDIN);
$entity->print(\*STDOUT);