Я пытаюсь зашифровать (большие) файлы в PHP с помощью AES и изучил с помощью Mcrypt и OpenSSL, проблема в том, что все решения, которые я нашел, пока только зашифровывают строки, а файлы, которые я пытаюсь зашифровать, вызовут максимальное предел памяти для PHP (который, к сожалению, не может быть установлен выше), как бы я пошел для достижения этого?
Вы можете использовать шифрование CBC с использованием Mcrypt, а затем шифровать сегмент данных за раз. Убедитесь, что сегмент в x раз больше размера используемого шифра (например, 16 байтов для AES). Зашифруйте сегмент и возьмите последний блок сгенерированного зашифрованного текста и используйте его как IV для следующего сегмента. Последний сегмент должен быть дополнен PKCS # 7 (множество примеров, включая mcrypt_encrypt
Комментарии).
Объединяя сегменты в цепочку, вы получаете зашифрованный текст, неотличимый от одного шифрования (протестируйте свой код, используя эту информацию). Расшифровка идентична, используя шифротекста как IV. Чтобы увидеть, как это работает, посмотрите на метод шифрования CBC:
РЕДАКТИРОВАТЬ: если возможно, вы должны использовать эквивалентную функциональность OpenSSL. Это (хорошо) не задокументировано, но вы должны быть в состоянии сделать то же самое, используя код, найденный в ссылке в комментарии, упомянутом Скоттом. Обратите внимание, что вы должны первый выполнить все без заполнения, а затем для финального сегмента с обивкой.
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
Это пример кода
Я опубликовал две функции, которые шифруют и дешифруют даже большие файлы с помощью openssl_encrypt()
с использованием AES-128-CBC алгоритм.
Пожалуйста, обратитесь к этому openssl_encrypt ().
Использование SSL на вашем сайте позаботится об этом за вас. Любые передаваемые файлы зашифровываются клиентским браузером и сервером по протоколу HTTPS.
Что касается хранения зашифрованных версий файлов, я бы не советовал.