Статус: Участник
Группы: Участники
Зарегистрирован: 11.08.2015(UTC) Сообщений: 19 Откуда: Екатеринбург Сказал(а) «Спасибо»: 4 раз
|
Добрый день! Пытаемся расшифровать зашифрованный файл с помощью КриптоПро ЭЦП Browser plug-in (тестировалось в разных браузерах). Зашифрован может быть любой исходный файл (выбирается пользователем) - произвольное содержимое и размер (но не более 20 Мб). Код:
var encryptedData = CreateObject("CAdESCOM.CPEnvelopedData");
encryptedData.Recipients.Clear();
encryptedData.Recipients.Add(certificate);
encryptedData.Decrypt(encryptedContent);
//encryptedData.ContentEncoding = CADESCOM_BASE64_TO_BINARY;
encryptedData.ContentEncoding = CADESCOM_STRING_TO_UCS2LE;
// Отправляем результат на сервер
var xhr = new XMLHttpRequest();
xhr.open('POST', uploadUrl, true);
xhr.setRequestHeader("Content-Type", "text/plain;charset=UTF-16LE"); // Для случая, когда результат в UCS-2
xhr.responseType = 'text';
xhr.send(encryptedData.Content);
В качестве encryptedContent передаются зашифрованные данные, закодированные в Base64. Результат считываем из свойства encryptedData.Content. Если в качестве ContentEncoding указываем CADESCOM_BASE64_TO_BINARY, то при исходном файле относительно небольшого размера все прекрасно работает. Получаем расшифрованный контент в виде Base64 строки, отправляем на сервер, там декодируем - на выходе исходный файл. Проблема в том, что при росте объема исходных данных время обращения к свойству encryptedData.Content нелинейно возрастает (метод Decrypt при этом выполняется быстро). Если контент файла в 0.5 МБ получаем за 5 сек, то файл 2 МБ - больше минуты, а 8 МБ - ни разу не дождался - браузер зависает напрочь, на запросы не реагирует. Если в качестве ContentEncoding указываем CADESCOM_STRING_TO_UCS2LE, то все отрабатывает приемлемо быстро вне зависимости от размера исходного файла, но с полученным результатом в виде строки UTF-16 имеются проблемы. При передаче на сервер и последующем декодировании содержимое полученного файла отличается от исходного. В случае текстовых файлов может быть различие в 1 байт (при нечетном количестве байт в исходном файле при расшифровании теряется последний байт), в случае бинарников произвольного содержимого различия более существенные. На сервере контент декодируется примерно следующим java-кодом: Код:
ByteArrayOutputSream output = new ByteArrayOutputStream();
byte[] buffer = new byte[16 * 1024];
int bytesRead;
while ((bytesRead = input.read(buffer)) != -1)
output.write(buffer, 0, bytesRead);
String utf8 = new String(output.toByteArray(), "UTF-8");
return utf8.getBytes("UTF-16LE");
Есть ли какие-то выходы из сложившейся ситуации? Предпочтительным является возможность декодировать в Base64 за приемлемое время (точнее, декодирование происходит быстро, видимо, а тормозит какая-то внутренняя конвертация в Base64), есть ли возможность это исправить? Либо вариант с UCS-2, как достоверно получить корректный результат? Отредактировано пользователем 11 августа 2015 г. 18:13:52(UTC)
| Причина: Не указана
|
|
|
|
Статус: Вам и не снилось
Группы: Администраторы
Зарегистрирован: 24.12.2007(UTC) Сообщений: 831 Откуда: Крипто-Про
Сказал(а) «Спасибо»: 1 раз Поблагодарили: 48 раз в 44 постах
|
Можете подготовить изолированный тест с засечками времени чтения encryptedData.Content для разных размеров файла и выводом результата? Чтобы можно было увидеть нелинейный рост времени? И прислать нам этот тест? |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 11.08.2015(UTC) Сообщений: 19 Откуда: Екатеринбург Сказал(а) «Спасибо»: 4 раз
|
Автор: Смирнов Можете подготовить изолированный тест с засечками времени чтения encryptedData.Content для разных размеров файла и выводом результата? Чтобы можно было увидеть нелинейный рост времени? И прислать нам этот тест? Да, во вложении. Посмотрите, пожалуйста. Тестовые данные там же в папке testfiles (testfile05.txt - 0.5МБ, testfile1.txt - 1МБ и т.д.). test.zip (50kb) загружен 9 раз(а).Отредактировано пользователем 12 августа 2015 г. 11:59:51(UTC)
| Причина: Не указана
|
|
|
|
Статус: Вам и не снилось
Группы: Администраторы
Зарегистрирован: 24.12.2007(UTC) Сообщений: 831 Откуда: Крипто-Про
Сказал(а) «Спасибо»: 1 раз Поблагодарили: 48 раз в 44 постах
|
Какую версию плагина используете? |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 11.08.2015(UTC) Сообщений: 19 Откуда: Екатеринбург Сказал(а) «Спасибо»: 4 раз
|
Автор: Смирнов Какую версию плагина используете? 2.0.12191
|
|
|
|
Статус: Сотрудник
Группы: Администраторы, Участники Зарегистрирован: 24.11.2009(UTC) Сообщений: 965 Откуда: Crypto-Pro
Сказал(а) «Спасибо»: 3 раз Поблагодарили: 174 раз в 152 постах
|
Размер файла: 4194304 Время шифрования, сек.: 0.528 Время расшифрования в Base64 (обращение к Content), сек.: 0.456 (0.098) Время расшифрования в UCS2 (обращение к Content), сек.: 0.361 (0.001)
вот что тест выдал у меня на самый крупный файл в последней версии плагина. |
|
|
|
|
Статус: Сотрудник
Группы: Администраторы, Участники Зарегистрирован: 24.11.2009(UTC) Сообщений: 965 Откуда: Crypto-Pro
Сказал(а) «Спасибо»: 3 раз Поблагодарили: 174 раз в 152 постах
|
Для 43 Мб Размер файла: 43221600 Время шифрования, сек.: 6.142 Время расшифрования в Base64 (обращение к Content), сек.: 7.323 (1.082) Время расшифрования в UCS2 (обращение к Content), сек.: 4.046 (0)
Тут разница весьма существенна, но и размер файла большой. |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 11.08.2015(UTC) Сообщений: 19 Откуда: Екатеринбург Сказал(а) «Спасибо»: 4 раз
|
У нас так: Размер файла: 524288Время шифрования, сек.: 0.103 Время расшифрования в Base64 (обращение к Content), сек.: 6.285 (2.039) Время расшифрования в UCS2 (обращение к Content), сек.: 0.045 (0.002) Размер файла: 1048576Время шифрования, сек.: 0.08 Время расшифрования в Base64 (обращение к Content), сек.: 8.495 (8.419) Время расшифрования в UCS2 (обращение к Content), сек.: 0.076 (0.002) Размер файла: 2097152Время шифрования, сек.: 0.16 Время расшифрования в Base64 (обращение к Content), сек.: 36.188 (36.049) Время расшифрования в UCS2 (обращение к Content), сек.: 0.15 (0.003) Размер файла: 4194304Зависает и выдается: https://yadi.sk/i/-h8ruYRNiQXc8
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 11.08.2015(UTC) Сообщений: 19 Откуда: Екатеринбург Сказал(а) «Спасибо»: 4 раз
|
А какое у Вас окружение:
1) ОС 2) Браузер 3) Версия плагина 4) Версия КриптоПро 5) Какие-то специфичные настройки для плагина есть?
Мы пробовали в разных браузерах, на разных машинах (c ОС Win), результат одинаков: на файле 4 Мб становится очень долго и подвисает...
|
|
|
|
Статус: Сотрудник
Группы: Администраторы, Участники Зарегистрирован: 24.11.2009(UTC) Сообщений: 965 Откуда: Crypto-Pro
Сказал(а) «Спасибо»: 3 раз Поблагодарили: 174 раз в 152 постах
|
Linux FireFox 38 2.0.12191 4.0 У меня timeout вот этого окошка "подождать ли скрипт" чуть сдвинут дальше. Правитm можно в about:config |
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close