Gwt Crypto - 由解密引起的奇怪异常需要太长时间?

时间:2017-04-10 08:30:11

标签: java encryption gwt exception-handling

我使用Gwt-crypto得到了一些非常奇怪的错误。当我尝试从首选项加载playerId时,我会执行以下操作:

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

DecryptString方法:

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

也会对此发表任何信息,不确定这意味着什么。

供参考,以下是我发起encryptor

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

如果您需要更多信息,请与我们联系。

1 个答案:

答案 0 :(得分:0)

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

此方法需要HEX字符串作为输入。所以你的密钥似乎对我无效。 (除非你在这里用无效垃圾替换它)因此它会导致加密和解密失败。

3DES还要求密钥长度在1-24个字节之间。如果它更长,它可能会导致问题。

并且,InvalidCipherTextException:pad块损坏:大多数加密方案在末尾添加一些随机/半随机字节,因此长度是算法的合适数字的倍数(如16或32)。如果你以某种方式得到这个错误,这可能意味着,加密文本的最后一部分丢失或损坏。

<强>更新

以下是TripleDesGenerator,Hex和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

由于您已使用同步方法解决了问题,因此我认为您的初始问题是由于某些线程问题。但据我所知,上述问题仍然存在。