2017-04-10 1 views
0

Gwt-cryptoを使っていくつかの本当に奇妙なエラーが発生しています。Gwt Crypto - 復号化に時間がかかりすぎるために発生する奇数例外?

public long loadIdFromPref(){ 
     Preferences preferences = Gdx.app.getPreferences(HelperKeys.Preferences.GAME_PREFS); 
     String secret = decryptString("ab0c441ca9dbd026bbb98a588e7d34d579dd00c326fbd38a"); 
     Long value = Long.parseLong(secret); 
     return value; 
    } 

DecryptString方法:私は、私は次の操作を行い好みからplayerIdをロードしようとすると

private String decryptString(String string) 
    { 
     try 
     { 
      string = getEncryptor().decrypt(string); 
     } 
     catch (DataLengthException e) 
     { 
      e.printStackTrace(); 
     } catch (IllegalStateException e) 
     { 
      e.printStackTrace(); 
     } catch (InvalidCipherTextException e) 
     { 
      e.printStackTrace(); 
     } 

     return string; 
    } 

時間の約30%私は次のエラーを取得する:

java.lang.NumberFormatException: For input string: "53096146ン8}+ン│ ̄" 
at java.lang.Long.parseLong(Long.java:589) 
at java.lang.Long.parseLong(Long.java:631) 
at java.util.TimerThread.mainLoop(Timer.java:555) 
at java.util.TimerThread.run(Timer.java:505) 

時にはうまく動作し、他のものではないという事実は、復号化には時には時間がかかり、コードが完了する前にコードが継続していると私に信じさせます。これはそれかもしれませんか?それについて私は何ができますか?

私は再作成するのは難しい時間の5%程度別のエラーを取得:

InvalidCipherTextException: pad block corrupted 

は、それが何を意味するのかわからない、あまりにもその上の任意の情報をappriciateだろう。

setEncryptor(new TripleDesCipher()); 
ripleDesKeyGenerator generator = new TripleDesKeyGenerator(); 
byte[] key = generator.decodeKey("jdkreur74832904ufke3382r2o3ijf9w"); 
getEncryptor().setKey(key); 

あなたは助けるために多くの情報が必要な場合は私に知らせてください:

は参考のために、ここで私はencryptorを開始する方法です。

答えて

0
byte[] key = generator.decodeKey("jdkreur74832904ufke3382r2o3ijf9w"); 

このメソッドでは、入力として16進文字列が必要です。だからあなたの鍵は私には無効であるようです。 (ここでは無効なガベージに置き換えない限り)暗号化と暗号解除に失敗します。

また、3DESでは、キーの長さが1-24バイトである必要があります。それより長い場合、問題を引き起こす可能性があります。

そして、InvalidCipherTextException:パッドブロックが壊れています:ほとんどの暗号化方式では、ランダムな/セミランダムのバイトが最後に追加されるため、長さはアルゴリズムの適切な数の倍数です(16または32など)。何らかの形でこのエラーが発生した場合は、暗号化されたテキストの最後の部分が見つからないか破損している可能性があります。

UPDATEは以下TripleDesGenerator、六角とHexEncoderクラスのソースコードへのリンクです。あなたがそれらに従うならば、あなたはそれが非六角入力の予期せぬ何かを生成し表示されます。 https://github.com/surevine/gwt-crypto/blob/master/src/main/java/com/googlecode/gwt/crypto/client/TripleDesKeyGenerator.java https://github.com/surevine/gwt-crypto/blob/master/src/main/java/com/googlecode/gwt/crypto/bouncycastle/util/encoders/Hex.java https://github.com/surevine/gwt-crypto/blob/master/src/main/java/com/googlecode/gwt/crypto/bouncycastle/util/encoders/HexEncoder.java

あなたがsyncronizedメソッドを使用して、あなたの問題を解決したので、私はあなたの最初の問題は、いくつかのスレッドの問題であったと仮定します。しかし、私が見るところでは、上記の問題はまだ残っています。

+0

decryptString()を同期させることで修正しました。それが終わるのを待っていなかった。 HEX値である必要はありません。 –

+0

@Green_qaue私の答えを確認してください。 – xycf7

関連する問題