Dot Net 中的 Android 应用内计费收据验证(C#)

标签 android .net cryptography in-app-purchase

我有一个提供应用内结算的 Android 应用程序,我们有我们的应用程序服务器,Android 应用程序连接到该应用程序服务器以向用户提供服务,在应用程序内购买时,我们希望将收据推送到服务器以进行验证过程。

现在的问题是我不知道如何转换 Security.java dot net(C#) 中的文件,因为我们的服务器是用 dot net 编写的

注意:此文件附带 android 应用内计费相同的应用程序,它提供消息签名功能,我只需要它们在 dot net 中的等效项。

有关此问题的更多详细信息,请访问 http://social.msdn.microsoft.com/Forums/en-US/netfxbcl/thread/66bb5683-fde6-47ca-92d7-de255cc8655a

最佳答案

这是一个纯 C# 实现,来自 Checking Google Play Signatures on .Net .

创建一个控制台应用程序项目,将公钥转换为 RSACryptoServiceProvider 期望的 XML 格式。添加PEMKeyLoader.cs到控制台应用程序项目。

using PublicKeyConvert;
using System.Security.Cryptography;

namespace ConsoleApplication
{
    class Program
    {
        static void Main(string[] args)
        {
            RSACryptoServiceProvider provider = PEMKeyLoader.CryptoServiceProviderFromPublicKeyInfo(MY_BASE64_PUBLIC_KEY);
            System.Console.WriteLine(provider.ToXmlString(false));
        }

        const string MY_BASE64_PUBLIC_KEY = "Paste your base64 Google public key here.";
    }
}

运行该控制台应用程序将输出(到控制台)RSACryptoServiceProvider 期望的 XML 格式。

现在您有了 XML 格式的公钥,您可以使用它来验证签名:

public static bool Verify(string message, string base64Signature, string xmlPublicKey)
{
    // Create the provider and load the KEY
    RSACryptoServiceProvider provider = new RSACryptoServiceProvider();
    provider.FromXmlString(xmlPublicKey);

    // The signature is supposed to be encoded in base64 and the SHA1 checksum
    // of the message is computed against the UTF-8 representation of the message
    byte[] signature = System.Convert.FromBase64String(base64Signature);
    SHA1Managed sha = new SHA1Managed();
    byte[] data = System.Text.Encoding.UTF8.GetBytes(message);

    return provider.VerifyData(data, sha, signature);
}

关于Dot Net 中的 Android 应用内计费收据验证(C#),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5605124/

相关文章:

java - DialogFragment 中的 findViewById - NullPointerException

Android 自定义 EditText 和后退按钮覆盖

c# - 从委托(delegate)检索调用方法和元数据

objective-c - 即使没有 IV,AES CBC 中的 CCCrypt 解密也能正常工作

java - Android 中的 RSA/非对称解密

python - 不明白我收到的错误?

android - RxJava : How to wait for all subscriptions to complete?

android - 使用 proguard 在 Android 上使 ORMLite 崩溃

javascript - IIS 和带有 zopfli 的预压缩 Assets

c# - 在 WinRT 应用程序中处理 2、3、4、5 个手指敲击、双击和按住手势