您是否正確初始化它?
獲取公鑰:
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));
}
你可以找到在谷歌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
}
謝謝,但它無法解析Base64.DEFAULT。 –
@AmjadOmari確保從android.util.Base64導入正確的Base64。它自API Version 8開始出現,並且應該在那裏。 –
我已經爲Base64導入了正確的一個,但sig.verify仍然返回false,並且我檢查了我正在使用正確的谷歌播放公共密鑰「此應用程序的許可證密鑰」, –