【问题标题】:Purpose of md5 in multipart/mixed e-mail form data多部分/混合电子邮件表单数据中 md5 的用途
【发布时间】:2015-12-15 22:26:32
【问题描述】:

我想知道在我找到herehere 的以下PHP sn-p 中md5("sanwebe") 校验和的用途。 “sanwebe”参数有什么作用?

if($file_attached) //continue if we have the file
{
  $boundary = md5("sanwebe"); 
  //header
  $headers = "MIME-Version: 1.0\r\n"; 
  $headers .= "From:".$from_email."\r\n"; 
  $headers .= "Reply-To: ".$email."" . "\r\n";
  $headers .= "Content-Type: multipart/mixed; boundary = $boundary\r\n\r\n"; 

  //plain text 
  $body = "--$boundary\r\n";
  $body .= "Content-Type: text/plain; charset=ISO-8859-1\r\n";
  $body .= "Content-Transfer-Encoding: base64\r\n\r\n"; 
  $body .= chunk_split(base64_encode($message_body)); 

  //attachment
  $body .= "--$boundary\r\n";
  $body .="Content-Type: $file_type; name=\"$file_name\"\r\n";
  $body .="Content-Disposition: attachment; filename=\"$file_name\"\r\n";
  $body .="Content-Transfer-Encoding: base64\r\n";
  $body .="X-Attachment-Id: ".rand(1000,99999)."\r\n\r\n"; 
  $body .= $encoded_content; 
}else{
  //proceed with PHP email.
  $headers = "From:".$from_email."\r\n".
  'Reply-To: '.$email.'' . "\n" .
  'X-Mailer: PHP/' . phpversion();
  $body = $message_body;
}

【问题讨论】:

  • 边界是强制分隔html版本和纯文本版本的,它是一个分隔符=)
  • 多部分电子邮件由“边界”分隔,该字符串不得出现在电子邮件内容中。 w3.org/Protocols/rfc1341/7_2_Multipart.html

标签: php email md5 multipartform-data multipart


【解决方案1】:

md5("sanwebe") 的结果被用作电子邮件中不同内容部分的边界。

为什么是“sanwebe”?完全没有理由。您那里的 sn-p 可能已发布在 sanwebe.com 上(快速 google 会找到一对),或者源自最初存在的 sn-p。 “sanwebe”没有什么特别之处,你也可以使用md5("stackoverflow")

【讨论】:

  • 唯一的要求是边界字符串在内容中不重复。 UUID 或足够长的随机字符串通常用于此目的。
  • 是的。 MD5 哈希非常适合。
  • 使用 MD5 做任何事情都会让人觉得很脏。 SHA256 可能是更好的选择。通常这些不必是加密安全的,但您希望最大限度地减少电子邮件内容与边界冲突的可能性。
  • 考虑到这里的上下文,确实没有理由回避 MD5。 现实是任何碰撞都会被制造出来。当然,也没有理由不使用 SHA256。它有点慢,但这永远不会成为瓶颈。
  • 运行几次时,例如生成电子邮件时,它甚至没有明显变慢。速度绝对不是问题。 SHA256 产生更大的值并且更耐碰撞,所以真的没有理由不使用它。
【解决方案2】:

多部分 MIME 消息中的不同部分必须有一种标记,以便接收者知道在哪里再次拆分这些部分。 这是通过使用 Content-Type 邮件标头的边界参数定义任意令牌来完成的。对这个令牌没有太多要求,但一个是:我可能不会出现在邮件中的其他任何地方。

在您显示的代码片段中使用 md5 函数只是使用 md5 函数生成一些可能不存在于消息中其他地方的令牌。您也可以对 md5 使用任何其他参数,或者您可以定义 $boundary 变量以包含任何其他随机字符串。

【讨论】:

    猜你喜欢
    • 2014-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-23
    • 2019-10-16
    • 2021-01-11
    • 2018-05-16
    • 2019-07-22
    相关资源
    最近更新 更多