2016-12-16 3 views
0

Я пытаюсь добавить некоторые функции в свою программу запуска. Необходимо проверить файлы игры до начала игры. Если какой-либо файл поврежден, программа обновления снова загрузит этот файл. Файлы можно проверить из xml-файла, который на сервере (с проверкой байтов файлов или md5). Я действительно плохо программирую, но пытаюсь изучить C#. Если кто-то поведет меня, я буду очень благодарен.Как проверить файлы для приложения launcher-updater?

ответ

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, если он подписан.

+0

Я думаю, что я не могу использовать это для проверки файлов игры, которые могут быть повреждены самими клиентами. –

+0

Да, конечно. Любая модификация файлов приведет к тому, что подпись станет недействительной. Кроме того, вы можете сказать разницу между тем, кто притворяется вами, и вы сами. – PaulProgrammer

+0

Кто-то пытается олицетворять вас, может использовать запись в файле hosts для перенаправления клиента на веб-сайт, на котором размещаются «взломанные» файлы и контрольные суммы. Если вы не используете что-то криптографически безопасное, вы не можете защитить от этого. – PaulProgrammer