уже поздно, я устал и, наверное, совсем дремлю...
Я написал приложение, которое мне нужно защитить, чтобы оно работало только на машинах, для которых я сгенерировал ключ. Что я сейчас делаю, так это получаю серийный номер BIOS и генерирую из него хеш, затем я шифрую его с помощью закрытого ключа XML RSA. Затем я подписываю XML, чтобы убедиться, что он не подделан. Я пытаюсь упаковать открытый ключ для расшифровки и проверки подписи, но каждый раз, когда я пытаюсь выполнить код от имени пользователя, отличного от того, который сгенерировал подпись, я получаю ошибку в подписи.
Большая часть моего кода изменена из образца кода, который я нашел, поскольку я не так хорошо знаком с шифрованием RSA, как хотелось бы. Ниже приведен код, который я использовал, и код, который, по моему мнению, мне нужно было использовать, чтобы все работало правильно...
Любая обратная связь будет очень признательна, так как я совершенно потерялся в этот момент, исходный код, с которым я работал, был таким, этот код работает нормально, пока пользователь, запускающий программу, является тем же, кто изначально подписал документ...
CspParameters cspParams = new CspParameters();
cspParams.KeyContainerName = "XML_DSIG_RSA_KEY";
cspParams.Flags = CspProviderFlags.UseMachineKeyStore;
// Create a new RSA signing key and save it in the container.
RSACryptoServiceProvider rsaKey = new RSACryptoServiceProvider(cspParams)
{
PersistKeyInCsp = true,
};
Я считаю, что этот код должен делать, но он не может проверить подпись, что бы я ни делал, независимо от того, тот же это пользователь или другой...
RSACryptoServiceProvider rsaKey = new RSACryptoServiceProvider();
//Load the private key from xml file
XmlDocument xmlPrivateKey = new XmlDocument();
xmlPrivateKey.Load("KeyPriv.xml");
rsaKey.FromXmlString(xmlPrivateKey.InnerXml);
Я считаю, что это как-то связано с именем ключевого контейнера (извините, пожалуйста, за то, что я настоящий тупица). Я совершенно уверен, что это строка, которая заставляет его работать в первом случае и мешает ему работать в второй случай....
cspParams.KeyContainerName = "XML_DSIG_RSA_KEY";
Есть ли способ подписать/зашифровать XML с помощью закрытого ключа при создании лицензии приложения, а затем поместить открытый ключ в каталог приложения и использовать его для проверки/расшифровки кода? Я могу отказаться от части шифрования, если я смогу заставить часть подписи работать правильно. Я использовал его в качестве резервной копии, чтобы скрыть происхождение лицензионного кода, из которого я ввожу ключ.
Есть ли в этом смысл? Я полный дурак?
Спасибо за любую помощь, которую кто-нибудь может дать мне в этом.