如何验证应用程序启动器更新程序的文件?

时间:2016-12-16 02:31:20

标签: xml launcher verify

我试图在我的游戏启动器中添加一些功能。需要在游戏exe开始之前验证游戏文件。如果任何文件已损坏,更新程序将再次下载该文件。可以从服务器上的xml文件(带有检查文件byte或md5)验证文件。我在编程方面非常糟糕,但试图学习c#。如果有人会指导我,我将非常感激。

1 个答案:

答案 0 :(得分:1)

MD5校验和是一种简单但不是万无一失的验证方式。

我建议使用加密签名,这是一种校验和(目前通常是SHA256)加密方式,可以让收件人验证有效负载的真实性。

使用这种技术,您的用户不仅知道有效负载是有效的,而且知道它来自您而不是攻击您网站的人。

当然,这依赖于私钥的神圣性,所以要保证它们的安全。

您可以按照https://msdn.microsoft.com/en-us/library/hk8wx38z(v=vs.110).aspx

上的教程执行此操作

Sayith Microsoft:

  

数字签名通常应用于表示较大数据的哈希值。以下示例将数字签名应用于哈希值。首先,创建RSACryptoServiceProvider类的新实例以生成公钥/私钥对。接下来,将RSACryptoServiceProvider传递给RSAPKCS1SignatureFormatter类的新实例。这会将私钥传输到RSAPKCS1SignatureFormatter,后者实际执行数字签名。在对哈希代码进行签名之前,必须指定要使用的哈希算法。此示例使用SHA1算法。最后,调用CreateSignature方法来执行签名。

class Class1
{
   static void Main()
   {
      //The hash value to sign.
      byte[] HashValue = {59,4,248,102,77,97,142,201,210,12,224,93,25,41,100,197,213,134,130,135};

      //The value to hold the signed value.
      byte[] SignedHashValue;

      //Generate a public/private key pair.
      RSACryptoServiceProvider RSA = new RSACryptoServiceProvider();

      //Create an RSAPKCS1SignatureFormatter object and pass it the 
      //RSACryptoServiceProvider to transfer the private key.
      RSAPKCS1SignatureFormatter RSAFormatter = new RSAPKCS1SignatureFormatter(RSA);

      //Set the hash algorithm to SHA1.
      RSAFormatter.SetHashAlgorithm("SHA1");

      //Create a signature for HashValue and assign it to 
      //SignedHashValue.
      SignedHashValue = RSAFormatter.CreateSignature(HashValue);
   }
}

具体来说就是XML:

  

.NET Framework提供System.Security.Cryptography.Xml命名空间,该命名空间允许您对XML进行签名。当您要验证XML源自某个源时,签名XML非常重要。例如,如果您使用的是使用XML的股票报价服务,则可以验证XML的来源(如果已签名)。

相关问题