尝试执行同步时,as3Crypto中的填充错误

时间:2010-02-11 18:11:51

标签: flex3 as3crypto

我正在尝试使用 as3crypto 包在flex(AIR)中加密/解密文件。 问题是,当尝试处理稍大的文件(超过5M)时,处理时间变得非常长,客户端冻结(获得“无响应”标题) 所以我试着去Async并一次加密/解密一个块,并用帧刷新率交织它。

加密变得顺畅,或者看起来如此,但是当我尝试将结果解密回原始文档时,我得到填充错误: “错误: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 :(得分:0)

..发现了这个错误。

加密和解密操作会更改实际的块大小。 在 processChunck 方法中,加密前的ByteArray长度为16400,更改为16416之后。 使用decrypt将ByteArray长度从16416更改回16400。

因此我选择的解决方案是使用两个数值,每个方法使用一个。

我不知道为什么会这样,它不是填充(用 Crypto.getPad(“无”)进行测试)。

我会在一两天内在我的博客上发布代码。 (http://giladmanor.com

答案 1 :(得分:0)