2015-01-12 2 views
1

Мне нужно сгенерировать лицензионный ключ для приложения. Я думал об использовании RSACryptoServiceProvider, но я заметил, что закрытый ключ, сгенерированный с помощью ToXmlString (true), также содержит открытый ключ. Проблема в том, что приложение будет храниться на серверах клиентов, и я не хочу, чтобы они могли генерировать собственный лицензионный ключ, используя часть открытого ключа из созданного ключа.RSACryptoServiceProvider расшифровывать, используя только закрытый ключ

Например, если у меня есть этот секретный ключ

<RSAKeyValue> 
    <Modulus>mqZY4yfKdHJ6gl/5elFgSXnDLztsj6fpCmjNymYyeWa/4qVA66fydrAE5Rl2OVoNCRUTpCUM8paZxh2eqza5lETYRdfRw+4FNu2rO13synPTKirck0JucCDXytQBZZnD4SFCljJr3NDlYveuEk7NsdeIsHYypXvPtURhkDtDGG8=</Modulus> 
    <Exponent>AQAB</Exponent> 
    <P>zD53GW+HevT5SaWsvLwoT/qUO5MZXgbg7ME1OLwmzd99nRZuIayhLrkYZ9MWNnL2BWLGcRbj7GlOXUY2ouqsfQ==</P> 
    <Q>wdamjYch6EQgXDe6lA/zb8lAWxO+Djjkrtda2cjwXrMoLbJUKVo3z/pmWCnNX9I3v5PtM8YoL4Pp6zXcVuloWw==</Q> 
    <DP>L7goe3jjXob994cN5MrRYF5bY8/qjV1uD+LUXH0ZU+BzqNAkyxlaT2BPo3JeLjqN4JRDaQjAF+xCsuhEu6u4wQ==</DP> 
    <DQ>umTai8WiCWNZatP8Cly8ToZL6Ei3vZ1f6fEUX9AltCq7PBX7cDhc6xVyTN0FrFrNWN+6fMrT4b0Lty53zutreQ==</DQ> 
    <InverseQ>g+DldM+/FD/3vEop5o4T2xjL8SIYSFY3kjPIrIxFkzpVGb98jHYT+JNjdezw2n78AawqUhRBLCgDnC6K2YmINQ==</InverseQ> 
    <D>Crtoh7sHLbWUEuAeLALhr7end+ujyQRaA8LqJRWagxpCTrQxISlyhhIJBO0Taz94kBzKVCXOFDenTDxZ+n+9uRS9zlg1nE3thEqrWf/fOMB+H+49HF/stSCyFp2+xqKFPBzwL2hrdixsEe5beWaM8r1nLChKzG3/BbVlY5/a2GE=</D> 
</RSAKeyValue> 

есть способ расшифровать без него, имеющий модуль и экспоненту теги в нем?

+0

Глупо использовать PKI для получения лицензий в приложении .Net. Его можно легко декомпилировать, и система лицензирования будет нарушена. Используйте ключ AES, встроенный в приложение. – i486

ответ

0

Вы можете расшифровать данные только в том случае, если у вас есть закрытый ключ. Поэтому я бы предпочел не передавать ключ на ваши клиентские устройства. В противном случае любой может получить доступ к pk и создать свою собственную лицензию. Было бы разумнее создать вашу лицензию и подписать ее с помощью вашего личного ключа. Затем ваше клиентское приложение проверяет действительную подпись - я думаю, что это лучшая практика из того, что я видел на нескольких реализациях лицензионных сервисов.

+0

Моя проблема в том, что мне также нужно закодировать некоторые данные внутри лицензионного ключа –

+0

Зачем его нужно кодировать? Я могу только представить данные о лицензии, которые знают как вы, так и ваш клиент, поэтому подписывание деталей должно быть «безопасным» от манипуляции, поскольку вы только подписываете их своим личным ключом. Или что вы имеете в виду? – Sebastian

+0

Приложение разбито на модули, и мне нужно кодировать количество пользователей для каждого из модулей и дату, пока лицензия не будет действительна –

Смежные вопросы