Шифрование (больших) файлов в PHP с помощью openSSL

Я пытаюсь зашифровать (большие) файлы в PHP с помощью AES и изучил с помощью Mcrypt и OpenSSL, проблема в том, что все решения, которые я нашел, пока только зашифровывают строки, а файлы, которые я пытаюсь зашифровать, вызовут максимальное предел памяти для PHP (который, к сожалению, не может быть установлен выше), как бы я пошел для достижения этого?

4

Решение

Вы можете использовать шифрование CBC с использованием Mcrypt, а затем шифровать сегмент данных за раз. Убедитесь, что сегмент в x раз больше размера используемого шифра (например, 16 байтов для AES). Зашифруйте сегмент и возьмите последний блок сгенерированного зашифрованного текста и используйте его как IV для следующего сегмента. Последний сегмент должен быть дополнен PKCS # 7 (множество примеров, включая mcrypt_encrypt Комментарии).

Объединяя сегменты в цепочку, вы получаете зашифрованный текст, неотличимый от одного шифрования (протестируйте свой код, используя эту информацию). Расшифровка идентична, используя шифротекста как IV. Чтобы увидеть, как это работает, посмотрите на метод шифрования CBC:

введите описание изображения здесь


РЕДАКТИРОВАТЬ: если возможно, вы должны использовать эквивалентную функциональность OpenSSL. Это (хорошо) не задокументировано, но вы должны быть в состоянии сделать то же самое, используя код, найденный в ссылке в комментарии, упомянутом Скоттом. Обратите внимание, что вы должны первый выполнить все без заполнения, а затем для финального сегмента с обивкой.

3

Другие решения

http://www.shellhacks.com/en/Encrypt-And-Decrypt-Files-With-A-Password-Using-OpenSSL

$ openssl enc -aes-256-cbc -salt -in file.txt -out file.txt.enc

чтобы не использовать слишком много памяти, вам нужен потоковый шифр. Вызовите это в PHP с помощью обратных символов `

или с shell_exec

редактировать

Поскольку shell exec недоступен

http://jeremycook.ca/2011/03/20/easy-file-encryption/

Там есть решение. Хотя и этого не могу не подчеркнуть. Потоковые шифры трудны. Я не полностью рассмотрел код и не думаю, что способен. Использование открытого SSL напрямую — намного лучший вариант

http://php.net/manual/en/filters.encryption.php

Это пример кода

1

Я опубликовал две функции, которые шифруют и дешифруют даже большие файлы с помощью openssl_encrypt() с использованием AES-128-CBC алгоритм.

Пожалуйста, обратитесь к этому openssl_encrypt ().

0

Использование SSL на вашем сайте позаботится об этом за вас. Любые передаваемые файлы зашифровываются клиентским браузером и сервером по протоколу HTTPS.

Что касается хранения зашифрованных версий файлов, я бы не советовал.

-3
По вопросам рекламы [email protected]