【问题标题】:Padding error in as3Crypto when trying to work a-sync尝试异步工作时 as3Crypto 中的填充错误
【发布时间】: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);
    
    
    }
    

请帮帮我!

【问题讨论】:

    标签: flex3 as3crypto


    【解决方案1】:

    ..发现错误。

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

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

    我不知道为什么会这样,不是填充(用 Crypto.getPad("none") 测试过)。

    我将在一两天后将代码发布到我的博客上。 (http://giladmanor.com)

    【讨论】:

      【解决方案2】:
      猜你喜欢
      • 2013-11-25
      • 2016-02-02
      • 2017-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多