Самый эффективный способ памяти для шифрования двоичных файлов в приложении Rails? - PullRequest
1 голос
/ 19 июля 2011

Мне нужно зашифровать двоичные файлы (в диапазоне от десятков кб до пары мб) в памяти в приложении Rails. Из соображений соответствия я не могу записать файл на диск в незашифрованном виде. Меня беспокоит потребление памяти, связанное с этим подходом. Я задаюсь вопросом, есть ли какие-либо рекомендации для способа сделать это (возможно, есть способ, которым я могу поток / чанк данных), который будет менее интенсивным, чем пытаться работать со всем файлом сразу?

Я бы предпочел использовать шифр openssl aes-256-cbc, хотя я открыт для других алгоритмов (например, потокового шифра), если он достаточно безопасен и решает мою проблему с памятью. У меня уже есть шифрование, работающее с файлами aes-256-cbc, поэтому я действительно сосредоточен на аспекте памяти, а не на том, как на самом деле делать шифрование.

Есть ли хорошие варианты для шифрования больших потоков двоичных данных?

Ответы [ 2 ]

4 голосов
/ 21 июля 2011

Не понимаю, почему вас беспокоит потребление памяти любым из алгоритмов шифрования, предлагаемых Ruby?

Если вы используете Cipher#update, то вы получите куски зашифрованных данных, которые вы можете записать в свой выходной поток. Размер блока AES составляет 16 байтов (128 бит, независимо от AES-128 или AES-256), поэтому для каждых 16 байтов, которые вы передаете, он генерирует 16 байтов зашифрованного вывода. Это означает, что нет необходимости буферизовать входные данные и зашифровывать их все за один раз, вы можете прочитать куски ввода и зашифровать их, используя Cipher#update, прежде чем записать их в свой вывод:

# assuming io is the IO representing your uploaded file 
# and out is the IO you are writing to
while chunk = io.read(1024)
  out << cipher.update(chunk)
end
out << cipher.final
1 голос
/ 19 июля 2011

Просто за то, что пользователь загрузил файл, который вы будете иметь незашифрованным, на диск во временном местоположении, ожидая, пока он будет скопирован в другое место вашим загрузчиком rails.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...