android许可证检查首选项混淆器getString捕获ValidationException

android许可证检查首选项混淆器getString捕获ValidationException,android,encryption,Android,Encryption,我正在实施Android许可证检查,目前正在使用com.google.Android.vending.licensing的未经修改的副本进行测试——我知道需要对其进行大量修改以保持安全 我以标准方式调用检查: private void checkLicence() { if (licenseChecker == null) { licenseCheckerCallback = new Callbacks(); licenseChecker = ne

我正在实施Android许可证检查,目前正在使用com.google.Android.vending.licensing的未经修改的副本进行测试——我知道需要对其进行大量修改以保持安全

我以标准方式调用检查:

private void checkLicence()
{
    if (licenseChecker == null)
    {
        licenseCheckerCallback = new Callbacks();
        licenseChecker = new LicenseChecker
        (
            this, new ServerManagedPolicy(this, new AESObfuscator(SALT, packageName, id)), pubKey
        );
    }
    setProgressBarIndeterminateVisibility(true);
    licenseChecker.checkAccess(licenseCheckerCallback);
}
首次启动应用程序时,PreferenceObfuscator.getString会为ApkeExpansionPolicy提供默认值,因为尚未保存首选项

第二次运行应用程序时,值已通过PreferenceObfuscator.putString保存,但当ApkeExpansionPolicy调用getString检索这些值时,getString会在捕获BadPaddingException时拾取AESObfuscator.unobfuscate引发的ValidationException

BadPaddingException的getMessage提供了:

error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt 错误:06065064:数字信封例程:EVP_DecryptFinal_ex:错误解密 ValidationException的结果是PreferenceObfuscator.getString返回默认值,而不是保存的值

我检查了,PreferenceObfuscator.getString从共享首选项检索到的字符串与putString保存在那里的加密字符串相同,末尾包含相同数量的“=”符号


为什么我要用普通的库代码来解决这个问题?

这就是我构建SALT的方式。我用了一种我认为总是可以设置相同值的方式,而不仅仅是一个数组文本,但在代码中加入了一个错误。

人类的思维是一件美妙的事情。我花了几个小时试图找出答案,结果失败了。然后我睡觉,早上醒来知道正确答案。