#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. ДА…. но все остальные методы требуют, чтобы они знали пароль. Это единственный известный мне метод, с помощью которого они могут создать свой собственный пароль.