2014-12-20 4 views
6

Я нашел несколько решений, в которых я могу использовать поставщик .Net RSA для шифрования сообщения с открытым ключом и расшифровать его с помощью частного.Как шифровать с закрытым ключом и расшифровывать с открытым ключом в C# RSA

Но я хочу иметь шифрование с помощью закрытого ключа и дешифрование с помощью открытого ключа.

Я хочу сохранить открытый ключ в своем приложении и зашифровать лицензию, например, на моей машине dev с помощью закрытого ключа, отправить ее в приложение и разрешить расшифровку информации с помощью открытого ключа.

Как я могу это достичь?

+1

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

+1

** Асимметричное шифрование/дешифрование: ** каждый может шифровать (используя открытый ключ), только хост может расшифровать (используя закрытый ключ). ** Асимметричная подпись/проверка: ** только хост может подписываться (используя закрытый ключ), каждый может проверить (используя открытый ключ). –

+0

Вы проверили это http://www.codeproject.com/Articles/38739/RSA-Private-Key-Encryption –

ответ

6

Вы можете использовать генерацию подписи, в которой закрытый ключ используется для создания подписи, которая проверяет подлинность вашего сообщения.

// Create message and signature on your end 
string message = "Here is the license message"; 

var converter = new ASCIIEncoding(); 
byte[] plainText = converter.GetBytes(message); 

var rsaWrite = new RSACryptoServiceProvider(); 
var privateParams = rsaWrite.ExportParameters(true); 

// Generate the public key/these can be sent to the user. 
var publicParams = rsaWrite.ExportParameters(false); 

byte[] signature = 
    rsaWrite.SignData(plainText, new SHA1CryptoServiceProvider()); 

// Verify from the user's side. Note that only the public parameters 
// are needed. 
var rsaRead = new RSACryptoServiceProvider(); 
rsaRead.ImportParameters(publicParams); 
if (rsaRead.VerifyData(plainText, 
         new SHA1CryptoServiceProvider(), 
         signature)) 
{ 
    Console.WriteLine("Verified!"); 
} 
else 
{ 
    Console.WriteLine("NOT verified!"); 
} 

вы можете взять дополнительную помощь от HERE

+1

Я удалил термин «стратегия подписи», поскольку я никогда не слышал о генерации подписи, который будет описан таким образом. –

+4

Что делать, если вы хотите фактически зашифровать данные - не просто проверить подлинность, используя хэш? –

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