Отправка зашифрованного файла (zip или txt) — через PHP — открывается на ПК с Windows

#php #encryption #zip

#php #шифрование #zip

Вопрос:

Мне нужно отправить пользователям по электронной почте некоторые минимальные данные (но они должны быть зашифрованы).

Им нужно будет удалить вложение и расшифровать его с помощью какого-либо простого в использовании программного обеспечения (PC / MAC) … есть идеи?

Моя первая мысль — создать зашифрованный zip-файл, который они могут открыть с помощью 7zip или winzip… но я обнаружил, что это не может произойти с типичным приложением PHP / Linux.

Комментарии:

1. Вы знаете, что они должны знать пароль, верно? Определите минимальный.

2. @webarto Минимальный, как и во всем тексте, и менее 1000 слов.

Ответ №1:

Вы можете использовать mcrypt и Blowfish для шифрования сообщения. Вы можете найти множество программ шифрования / дешифрования для 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þJV$3Äö,'  [y€amp;”¼‚•òÏ=$Å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.����"
  

Программе, которую я связал, нужен входной файл, подобный этому (вы можете легко сделать это в электронной почте).

——НАЧАТЬ MYSECRET —— TVn8APjdMOdLPUBQ2OWsEh7wWnihhKKOKf11Vj0oo4pM20BPwrRXJyL nBOL dpxdc PQQoQlr0Vz1n1Fv932HQ16DG712ui69T3O0jI3NfX8jRjtZkal /sFy Vu9JJEWPfZ2Ri1fkfOCqe9ZvFEmJ78BcUVmf37SYbgKi8UcAv4i1heHfJ05e nde6nFeiyDptYflT7SiIGHcO1cVya22b1OLHakAE2paS1OJqQrHYc 5wEAdo DU/0BmNvNNYOekmHZT19C1 cIwZFo3ACLRN44gZffx king570uconya7nw hzt6gvQHXEp2jnE= ——ЗАВЕРШИТЬ MYSECRET——

Комментарии:

1. Я думаю, что мне это нравится больше всего .. Попробую.

Ответ №2:

Не является ли решением для вас хранить архивы на сервере и отправлять по электронной почте ссылку на страницу php, которая может извлекать определенный zip и отправлять его пользователю после входа пользователя в систему с базовой аутентификацией. Таким образом, только пользователи, которые знают пароль, могут выполнить этот скрипт и загрузить файл. Что вы думаете?

Комментарии:

1. Извините, я должен был указать, я также не хочу хранить файл на сервере…

Ответ №3:

Чего не может произойти с обычным приложением PHP? Вы, конечно, можете архивировать файлы: http://php.net/manual/en/book.zip.php

Ответ №4:

Я использую 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 "nn command returned $return_valuen";

    $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 — хороший вариант.

Это намного лучше, скажем, для обработки онлайн-бронирований, которым нужно перейти только на одно электронное письмо, которое вы контролируете, чем для того, что вам нужно, но я подумал, что я бы выбросил это там.

Комментарии:

1. ДА…. но все остальные методы требуют, чтобы они знали пароль. Это единственный известный мне метод, с помощью которого они могут создать свой собственный пароль.