2009-03-25 7 views
0
DWORD nSize; 
LPBYTE lpData; 
HCRYPTKEY hPublicKey; 


nSize = ReadFromFile(lpszUserPublicKey, NULL); 

if(nSize == -1) 
    return FALSE; 

lpData = new BYTE[nSize]; 

ReadFromFile(lpszUserPublicKey, lpData); 

if(!CryptImportKey(hProv, lpData, nSize, NULL, 0, &hPublicKey)) { 
    delete lpData; 
    return FALSE; 
} 

Erase(lpData, nSize); 

// Get the data size(&nSize) 
if(!CryptExportKey(hKey, hPublicKey, SIMPLEBLOB, 0, NULL, &nSize)) 
    return FALSE; 

lpData = new BYTE[nSize]; 

CryptExportKey(hKey, hPublicKey, SIMPLEBLOB, 0, lpData, &nSize); 

if(WriteToFile(lpszLicenseFile, lpData, nSize) == -1) { 
    delete lpData; 
    return FALSE; 
} 

delete lpData; 

return CryptDestroyKey(hPublicKey); 

Как бы указанный код был написан на C#. Меня особенно интересуют вызовы Crypto API. Примечание. Используемый метод шифрования - RSAC# RSA эквивалентный код C++ Crypto API

+0

надежду, что помогает: [Как генерировать пары ключей, шифрования и дешифрования данных с CryptoAPI] (http://blogs.msdn.com/b/alejacma/archive /2008/01/28/how-to-generate-key-pairs-encrypt-and-decrypt-data-with-cryptoapi.aspx) – lsalamon

ответ

2

This Код проекта, кажется, соответствует вашим потребностям. Как показано в статье, C# имеет класс RSACryptoServiceProvider в System.Security.Cryptography, чтобы сделать вещи немного проще, поэтому вам не нужно катить все решение и переводить весь этот код вручную.

+0

Спасибо за комментарий. Я знаю, как использовать RSACryptoServiceProvider. Но каковы эквивалентные методы класса RSACryptoServiceProvider для вышеупомянутых вызовов Crypto API. – 2009-03-25 19:56:45

+0

Вы можете просмотреть все это с помощью .NET Reflector с http://www.red-gate.com/products/reflector/ :) –

1


я написал статью о RSA в C++ и C#, если вы заинтересованы. Он содержит код и все, что вам нужно знать, чтобы RSA работал на обоих языках, обмениваясь ключами и сообщениями между ними :).

Вы можете найти здесь:
Crypt in C++ and Decrypt in C# (and C++)

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