尝试异步工作时 as3Crypto 中出现填充错误

发布于 2024-08-20 17:50:53 字数 1297 浏览 4 评论 0原文

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

加密过程很顺利,或者看起来是这样,但是当我尝试将结果解密回原始文档时,我收到填充错误: “错误:PKCS#5:unpad:无效的填充值。预期[252],发现[152]

我的代码如下(在启动和结束之间):

  • 运行 方法被重复调用,直到文件完成
  • _buffer 包含源文件中的字节数组
  • _结果 结果
  • CHUNK 是字节大小我每次
  • 密码启动时处理的字节数为:Crypto.getCipher("aes-ecb", _key, Crypto.getPad("pkcs5"));

    公共函数 run(data:Object):Boolean{
    
        if((_buffer.length-_position)>CHUNK){
            processChunk(_position,CHUNK);
            _位置+=块;
            var e:ProgressEvent = new ProgressEvent(ProgressEvent.PROGRESS,false,false,_position,_buffer.length);
            this.dispatchEvent(e);
            返回真;
        }否则 if(!_isFinnalized){
            processChunk(_position,_buffer.length - _position);
            this.dispatchEvent(new Event(Event.COMPLETE));
            最终化();
    
        }
    
        返回假;
    }
    
    
    私有函数 processChunk(position:uint,chunk:uint):void{
        var buffer:ByteArray = new ByteArray();
        buffer.writeBytes(_buffer,位置,块);
         if(_action==加密){
            _aes.加密(缓冲区);
        }别的{
            _aes.decrypt(缓冲区);
        } 
        _result.writeBytes(缓冲区);
    
    
    }
    

请帮助我!

I'm trying to encrypt/decrypt files in flex (AIR) using the as3crypto package.
the problem is that when attempting to process slightly large files (over 5M) the process time gets ridiculously long and the client freezes (get the "not responding" title)
so i tried to go Async and encrypt/decrypt a chunk at a time and interlace it with the frame refresh rate.

the encryption goes smooth, or so it seems, but when i try to decrypt the result back to the original document i get a padding error:
"Error: PKCS#5:unpad: Invalid padding value. expected [252], found [152]"

my code is like so (between initiation and finalization):

  • the run method gets called repeatedly until the file is completed
  • _buffer contains the byte array from the source file
  • _result the result
  • CHUNK is the bite size of bytes that i process each time
  • the cipher is initiated as: 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);
    
    
    }
    

help me, please!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

命比纸薄 2024-08-27 17:50:53

..发现了错误。

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

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

我不知道为什么会发生这种情况,它不是填充(用 Crypto.getPad("none") 测试过)。

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

..found the bug.

the encryption and decryption actions change the actual chunk size.
in the processChunck method, the ByteArray length before encryption was 16400 and after changed to 16416.
using the decrypt changes the ByteArray length from 16416 back to 16400.

hence the solution i chose was to use two numeric values, one for each method used.

I have no idea why this happens, its not the padding (tested it with Crypto.getPad("none")).

I'll be posting the code on my blog in a day or two.
(http://giladmanor.com)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文