我建立了一个android应用程序,向用户提供购买商品的能力,并且google购买对话框成功返回了付款,但是在活动结果中,该应用程序在Security.java验证方法中失败,总是返回false“ sig.verify( Based64.decode(signature))”。

任何帮助,为什么会发生,以及我必须做什么。
我已将应用发布到Play商店,但我不使用android.test。* sku,但我有自己的想法

最佳答案

您正确初始化了吗?

获取公钥:

public PublicKey getAPKKey(String keyFactoryAlgorithm) throws Exception{
    byte[] decodedKey = Base64.decode("...your google play public key...", Base64.DEFAULT);
    KeyFactory keyFactory = KeyFactory.getInstance(keyFactoryAlgorithm);
    return keyFactory.generatePublic(new X509EncodedKeySpec(decodedKey));
}


您可以在Google Play开发者控制台中找到您的公钥。

然后验证签名:

// get purchase data
Bundle ownedItems = ... query purchases
String purchaseData = ownedItems.getStringArrayList("INAPP_PURCHASE_DATA_LIST").get(0); // just index 0 for demonstration
String signature = ownedItems.getStringArrayList("INAPP_DATA_SIGNATURE_LIST").get(0); // just index 0 for demonstration

PublicKey pkey = getAPKKey("RSA");
Signature sig = Signature.getInstance("SHA1withRSA");
sig.initVerify(pkey);
sig.update(purchaseData.getBytes());

if(sig.verify(Base64.decode(signature, Base64.DEFAULT))) {
    // ok
} else {
    // not ok
}

10-08 17:10