【发布时间】:2010-02-11 18:11:50
【问题描述】:
我正在尝试使用 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); }
请帮帮我!
【问题讨论】: