Я пытаюсь зашифровать / расшифровать файлы в flex (AIR) с помощью пакета as3crypto .
проблема заключается в том, что при попытке обработать файлы небольшого размера (более 5 МБ) время обработки становится смехотворно большим, а клиент зависает (получить заголовок «не отвечает»)
поэтому я попытался выполнить асинхронную обработку и зашифровать / дешифровать порцию за раз и чередовать ее с частотой обновления кадров.
шифрование проходит гладко, или так кажется, но когда я пытаюсь расшифровать результат обратно в исходный документ, я получаю ошибку заполнения:
" Ошибка: PKCS # 5: unpad: неверное значение заполнения. Ожидается [252], найдено [152] "
мой код выглядит так (между началом и завершением):
- метод run вызывается до тех пор, пока файл не будет завершен
- _ буфер содержит байтовый массив из исходного файла
- _ результат результат
- 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);
}
помогите мне, пожалуйста!