Я пытаюсь зашифровать/расшифровать файлы во flex (AIR) с помощью пакета as3crypto. проблема в том, что при попытке обработать немного большие файлы (более 5M) время обработки становится смехотворно долгим, и клиент зависает (получает заголовок «не отвечает»), поэтому я попытался перейти на асинхронный режим и зашифровать/расшифровать фрагмент за раз и чередуйте его с частотой обновления кадров.
шифрование проходит гладко, или так кажется, но когда я пытаюсь расшифровать результат обратно в исходный документ, я получаю ошибку заполнения: "Ошибка: PKCS#5:unpad: Недопустимое значение заполнения. Ожидается [252], найдено [152]"
мой код такой (между инициацией и завершением):
- метод run вызывается повторно, пока файл не будет завершен
- _buffer содержит массив байтов из исходного файла
- _результат результат
- CHUNK – это размер байтов, которые я обрабатываю каждый раз.
шифр инициируется как: Crypto.getCipher("aes-ecb", _key, Crypto.getPad("pkcs5"));
public function run(data:Object):Boolean{ if((_buffer.length-_position)>CHUNK){ processChunk(_position,CHUNK); _position += CHUNK; var e:ProgressEvent = new ProgressEvent(ProgressEvent.PROGRESS,false,false,_position,_buffer.length); this.dispatchEvent(e); return true; }else if(!_isFinnalized){ processChunk(_position,_buffer.length - _position); this.dispatchEvent(new Event(Event.COMPLETE)); finnalize(); } return false; } private function processChunk(position:uint,chunk:uint):void{ var buffer:ByteArray = new ByteArray(); buffer.writeBytes(_buffer,position,chunk); if(_action==ENCRYPT){ _aes.encrypt(buffer); }else{ _aes.decrypt(buffer); } _result.writeBytes(buffer); }
Помоги мне, пожалуйста!