发送加密文件(zip或txt) - 通过PHP - 可在Windows PC上打开

时间:2011-10-20 22:05:25

标签: php encryption zip

我需要通过电子邮件向用户发送一些最小数据(但必须加密)。

他们需要DL附件并使用某种易于使用的软件(PC / MAC)解密...这里有什么想法吗?

我的第一个想法是创建一个可以用7zip或winzip打开的加密zip文件...但我发现使用典型的PHP / Linux应用程序不会发生这种情况。

4 个答案:

答案 0 :(得分:1)

您可以使用mcryptBlowfish加密邮件。您可以找到许多Blowfish的加密/解密程序,例如...... http://www.di-mgt.com.au/mysecret.html

<?php

    $key = 'too many secrets?';
    $text = 'If you are paranoid, we know who you are and what you want. Stay online so we can trace you.';

    $crypt_text = mcrypt_encrypt(MCRYPT_BLOWFISH, $key, $text, MCRYPT_MODE_ECB);

    var_dump($crypt_text);

    $plain_text = mcrypt_decrypt(MCRYPT_BLOWFISH, $key, $crypt_text, MCRYPT_MODE_ECB);

    var_dump($plain_text);

?>

测试:

string(96) "dà¨gþJ\V$3Äö,'  [y€&”¼‚\•òÏ=$ÅdG|ÀœÀbáÌɽûÝÉ·'þØ?I½}8óTé5<-‹ôÞ¶Ÿ°ÅMcCê®JxØ@RIú£Ç‹™xÞ"
string(96) "If you are paranoid, we know who you are and what you want. Stay online so we can trace you.����"

我链接的程序需要这样的输入文件(您可以轻松地在电子邮件中使用它)。

  

----- BEGIN MYSECRET ----- TVn8APjdMOdLPUBQ2OWsEh7wWhhhKKOKf11Vj0oo4pM20BPwrRXJyL + nBOL   dpxdc + PQQoQlr0Vz1n1Fv932HQ16DG712ui69T3O0jI3NfX8jRjtZkal / SFY   Vu9JJEWPfZ2Ri1fkfOCqe9ZvFEmJ78BcUVmf37SYbgKi8UcAv4i1heHfJ05e   nde6nFeiyDptYflT7SiIGHcO1cVya22b1OLHakAE2paS1OJqQrHYc + 5wEAdo   DU / 0BmNvNNYOekmHZT19C1 + cIwZFo3ACLRN44gZffx + KIng570UcoNYa7NWn   hzt6gvQHXEp2jnE =   -----结束MYSECRET -----

答案 1 :(得分:0)

您不是将存档存储在服务器上的解决方案,并通过电子邮件链接发送到可以获取特定zip的php页面,并在用户使用基本身份验证登录后将其发送给用户。因此,只有知道密码的用户才能执行该脚本并下载该文件。 你觉得怎么样?

答案 2 :(得分:0)

典型的PHP应用程序不会发生什么?您当然可以压缩文件:http://php.net/manual/en/book.zip.php

答案 3 :(得分:0)

我使用GNUPG:http://www.gnupg.org/

您需要访问自己的网络服务器才能安装或安装密钥环。

然后你可以将它与exec调用或GNUPG PECL扩展一起使用。

问题在于,用户必须使用您用来加密它的相同电子邮件地址($ gpgrecipient)来创建密钥,并且在加密之前必须这样做,并将其上传到公共密钥服务器(软件将执行)。然而,该软件非常简单,而且它是跨平台的。

对于我的php加密脚本,我使用:

<?php
//error_reporting(E_ALL);
echo 'GNUPG Test<br /><br />';

putenv("GNUPGHOME=/home/me/.gnupg");

$gpg = '/usr/bin/gpg';
$gpgrecipient = 'ben@mydomain.com';
$plaintext = 'This should be encrypted!!!!';



$descriptorspec = array(
   0 => array("pipe", "r"),  // stdin 
   1 => array("pipe", "w"),  // stdout 
   2 => array("file", "/usr/home/me/error-output.txt", "a") // stderr is a file to write to
);

$cwd = '/usr/bin/';
$env = array('GNUPGHOME' => '/usr/home/me/.gnupg');


$process = proc_open("gpg --no-auto-check-trustdb -q --auto-key-locate keyserver --no-secmem-warning --lock-never -e -a -r {$gpgrecipient}", 
                        $descriptorspec, $pipes, $cwd, $env);

if (is_resource($process)) {
    // $pipes now looks like this:
    // 0 => writeable handle connected to child stdin
    // 1 => readable handle connected to child stdout

    fwrite($pipes[0], $plaintext);
    fclose($pipes[0]);

    $encrypted = stream_get_contents($pipes[1]);
    fclose($pipes[1]);

    // It is important that you close any pipes before calling
    // proc_close in order to avoid a deadlock
    $return_value = proc_close($process);

 //   echo "\n\n command returned $return_value\n";

    $message = "

This is what we should have ideally (Encrypted Emails). 
Unencrypted text - name, date of arrival, etc. 
This part only Is encrypted and requires a password to view:

{$encrypted} 

More Unencrypted text at the end";


mail($mailrecp, 'Encrypted Emails Example', $message);

}


?>

这只会加密电子邮件的一部分,我会使用thunderbird和enigmail检索该部分。

您可以将其更改为输入文件,然后将其附加到电子邮件中。

你甚至可能找到一个生成密钥并将其上传到公共服务器,解密文件等等的准系统gnupg应用程序。等等。

如果数据非常敏感,我认为GnuPG是个不错的选择。

对于处理在线预订只是需要转到您控制的一封电子邮件而不是您需要的电子邮件来说,这要好得多,但我想我会把它扔出去。