Нет готового решения, чтобы предоставить то, что вам нужно. И хотя вы предоставили немного информации о данных, которые будут извлечены, вы не дали много подсказок о том, как данные попадут на веб-сервер.
Вы перепрыгиваете через множество обручей, чтобы убедиться, что данные не скомпрометированы - но если вы расшифровываете их на сервере, тогда существует не только риск того, что данные будут скомпрометированы, - но также и то, что ключ будет скомпрометирован. то есть в архитектуре больше театра, чем субстанции.
Вы, похоже, обладаете гибкостью в алгоритме, используемом для шифрования - что подразумевает, что вы имеете некоторый контроль над архитектурой - поэтому есть некоторые возможности для решения этих проблем.
Хэш, основанный на отметке времени, ключе и имени файла, проверяет URI и сохраняет его в списке, поэтому к нему можно получить доступ только один раз.
Как это обеспечивает доступ к нему только один раз? Конечно, его можно использовать для сокращения окна возможностей для CSRF, но это не устраняет его.
Затем сценарий забывает предыдущие данные и продолжает работу со следующим фрагментом до eof.
Это существенно подрывает цель шифрования - шаблоны в данных будут по-прежнему очевидны - и это обеспечивает механизм для использования атак методом перебора данных - даже если размер блока относительно велик. Посмотрите изображения здесь для простой демонстрации.
Гораздо более безопасный подход - использовать CBC и выполнять шифрование / дешифрование на клиенте.
Существуют реализации javascript нескольких алгоритмов шифрования (включая AES) на этой странице есть хороший инструментарий. А с помощью HTML5 / localstorage вы можете создать полноценное клиентское приложение на HTML / javascript.
Когда вы начинаете обнаруживать - простое использование умного алгоритма шифрования не делает ваше приложение безопасным - похоже, вам нужно вернуться и подумать о том, как вы сохраняете и извлекаете данные, прежде чем беспокоиться о методе, который вы используете для зашифровав его.