记一次接入谷歌广告验证
官方文档:https://developers.google.cn/admob/android/rewarded-video-ssv
需要httpserver进行验证,项目里有httpserver,因此通过将服务端ip端口绑定域名的方法进行验证回调。
验证回调:在官网添加应用了可以添加回调网址进行验证 加密使用的是ECDSA,c#解决方案参考:https://stackoverflow.com/questions/61659891/c-sharp-signature-verification-using-ecdsa-with-sha256-certificate 获取公钥网址:http://www.gstatic.com/admob/reward/verifier-keys.json
获得的json格式如下:{"keys":[{"keyId":3335741209,"pem":"-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE+nzvoGqvDeB9+SzE6igTl7TyK4JB\nbglwir9oTcQta8NuG26ZpZFxt+F2NDk7asTE6/2Yc8i1ATcGIqtuS5hv0Q==\n-----END PUBLIC KEY-----","base64":"MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE+nzvoGqvDeB9+SzE6igTl7TyK4JBbglwir9oTcQta8NuG26ZpZFxt+F2NDk7asTE6/2Yc8i1ATcGIqtuS5hv0Q=="}]}
pem和base64都可以进行验证,但需要转化成统一格式 验证过程:
var pubkeyString =
@"-----BEGIN PUBLIC KEY-----
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE+nzvoGqvDeB9+SzE6igTl7TyK4JBbglwir9oTcQta8NuG26ZpZFxt+F2NDk7asTE6/2Yc8i1ATcGIqtuS5hv0Q==
-----END PUBLIC KEY-----";
var pemreader = new PemReader(new StringReader(pubkeyString));
var pubkey = (AsymmetricKeyParameter)pemreader.ReadObject(); var data = "ad_network=5450213213286189855&ad_unit=1234567890&custom_data=106&reward_amount=1&reward_item=Reward&timestamp=1621586055036&transaction_id=123456789&user_id=11111";
StringBuilder signature = new StringBuilder();
signature.Append("MEYCIQCaRAEhqLlOBwSHrlNcZyunYROD3xIMROOD+zAamwlFDwIhANDRk9qXfAZg/BCLslzmqy2PFXk3fr3tQjaEqqSdaRyP");
//对base64格式化,替换和补位
signature = signature.Replace('-', '+').Replace('_', '/');
int remainder = signature.Length % 4;
if(remainder > 0)
{
signature.Append('=', 4 - remainder);
}
var signatureBytes = Convert.FromBase64String(signature.ToString()); // Verify using the public key
var signer = SignerUtilities.GetSigner("SHA-256withECDSA");
signer.Init(false, pubkey);
signer.BlockUpdate(Encoding.UTF8.GetBytes(data), 0, data.Length);
var success = signer.VerifySignature(signatureBytes); if (success)
{
Console.WriteLine("Signature verified successfully using public key");
}
else
{
Console.WriteLine("Failed to verify signature using public key");
}
附上可验收上述代码的,可以根据算法在线生成公钥私钥、加密数据、验证签名的网址:https://8gwifi.org/ecsignverify.jsp

最新文章

  1. 解决ssh localhost中root@localhost:要求输入密码问题(已经进行了无密码设置登录)
  2. SQL注入:突破关键字过滤
  3. 擦掉STM32F429芯片上的数据的一个方法
  4. bootstrap 模态 modal 小例子
  5. AgileEAS.NET SOA 中间件2013第四季度发布&部分功能开源预告
  6. android之RatingBar控件用法
  7. java String.split方法是用注意点(转)
  8. nyoj832 合并游戏(状态压缩DP)
  9. OC单例模式的实现
  10. (转)javabean操作文件正确,但是Jsp调用javabean时文件路径出错问题解决之JavaBean访问本地文件实现路径无关实现方法
  11. python报错“UnicodeEncodeError: 'ascii' codec can't encode characters in position 22-26: ordinal not in range(128)”问题解决
  12. 九九乘法表-for循环
  13. SDKmanager的位置
  14. static易错点
  15. vim编辑器头部自动插入注释和shell的高亮显示
  16. Flutter Android 真机调试指南
  17. Linux开启root用户
  18. 那种多空计算方法更正确呢?——从此图看应该是TEST005
  19. 批处理手动设置电脑的ip
  20. ftp协议及vsftpd的基本应用

热门文章

  1. php7.3的安装以及在Apache中部署php
  2. Vue29 自定义事件及消息总线
  3. MRS+LakeFormation:打造一站式湖仓,释放数据价值
  4. 原生微信小程序跳转传参 : [非TabBar跳转传参] 和 [TabBar跳转传参]
  5. 接口自动化库-apist
  6. Moonraker
  7. CF818G - Four Melody
  8. 微软出品自动化神器【Playwright+Java】系列(十)元素定位详解
  9. 【Sql Server】经典SQL语句大全
  10. 回顾——Dom节点类型