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