Ошибка заполнения в as3Crypto при попытке работать a-sync - PullRequest
1 голос
/ 11 февраля 2010

Я пытаюсь зашифровать / расшифровать файлы в 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);
    
    
    }
    

помогите мне, пожалуйста!

Ответы [ 2 ]

0 голосов
/ 04 июня 2010
0 голосов
/ 12 февраля 2010

.. обнаружил ошибку.

действия шифрования и дешифрования изменяют фактический размер чанка.в методе processChunck длина ByteArray до шифрования составляла 16400, а после была изменена на 16416. Использование расшифровки изменяет длину ByteArray с 16416 обратно на 16400.

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

Я понятия не имею, почему это происходит, это не заполнение (проверено с помощью Crypto.getPad ("none") ).

Я опубликую код на своем блоге через день или два.(http://giladmanor.com)

...