我正在实施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会为APKExpansionPolicy提供默认值,因为尚未保存首选项。
第二次运行应用程序时,已通过PreferenceObfuscator.putString保存了值,但是当APKExpansionPolicy调用getString来检索它们时,getString会在遇到BadPaddingException时选择AESObfuscator.unobfuscate抛出的ValidationException。
BadPaddingException的getMessage给出了:
error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt
ValidationException的结果是PreferenceObfuscator.getString返回默认值,而不是保存的值。
我检查过,PreferenceObfuscator.getString从共享首选项中检索到的字符串与putString保存的字符串相同,包括相同数量的" ="最后的迹象。
为什么我用vanilla库代码来解决这个问题?
答案 0 :(得分:0)
这是我构建SALT的方式。我只是设置了相同的值,而不仅仅是一个数组文字,但是在该代码中放了一个错误。