我正在尝试使用as3crypto包加密/解密 flex (AIR) 中的文件。问题是,当尝试处理稍微大的文件(超过 5M)时,处理时间变得非常长并且客户端冻结(得到“无响应”标题)所以我尝试去异步并一次加密/解密一个块和将其与帧刷新率交错。
加密进展顺利,或者看起来如此,但是当我尝试将结果解密回原始文档时,我得到一个填充错误:“错误: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); }
请帮帮我!