1

as3cryptoパッケージを使用してフレックス (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);
    
    
    }
    

お願い助けて!

4

2 に答える 2

0

..バグが見つかりました。

暗号化および復号化アクションにより、実際のチャンク サイズが変更されます。processChunckメソッドでは、暗号化前の ByteArray の長さは 16400 でしたが、16416 に変更されました。復号化を使用すると、ByteArray の長さが 16416 から 16400 に戻ります。

したがって、私が選んだ解決策は、使用する方法ごとに 1 つずつ、2 つの数値を使用することでした。

パディングではなく、なぜこれが起こるのかわかりません( Crypto.getPad("none")でテストしました)。

1 日か 2 日でブログにコードを投稿します。( http://giladmanor.com )

于 2010-02-11T21:19:10.613 に答える
0

これをチェックする価値があるかもしれませんhttp://ria101.wordpress.com/2010/06/04/as3crypto-rsa-padding-function-returned-null-bug-of-death-fix/

于 2010-06-04T16:25:20.143 に答える