2009-03-25 6 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); 

Comment le code ci-dessus serait écrit en C#. Je suis particulièrement intéressé par les appels API Crypto. Notez, la méthode de cryptage utilisée est RSAC# code équivalent RSA à l'API crypto C++

+0

espoir qui aide: [Comment générer des paires de clés, chiffrer et déchiffrer des données avec CryptoAPI] (http://blogs.msdn.com/b/alejacma/archive /2008/01/28/how-to-generate-key-pairs-encrypt-and-decrypt-data-with-cryptoapi.aspx) – lsalamon

Répondre

2

This L'article de codeproject semble correspondre à vos besoins. Comme indiqué dans l'article, C# a une classe RSACryptoServiceProvider dans System.Security.Cryptography pour rendre les choses un peu plus faciles afin que vous n'ayez pas à rouler une solution entière et à traduire tout ce code manuellement.

+0

Merci pour le commentaire. Je sais comment utiliser le RSACryptoServiceProvider. Mais quelles sont les méthodes équivalentes dans la classe RSACryptoServiceProvider aux appels API Crypto ci-dessus. –

+0

Vous pouvez voir tout cela en utilisant .NET Reflector à http://www.red-gate.com/products/reflector/ :) –

1


j'ai écrit un article sur RSA dans C++ etC# si vous êtes intéressé. Il contient le code et tout ce que vous devez savoir pour avoir RSA travailler dans les deux langues, l'échange de clés et de messages entre eux :).

Vous pouvez le trouver ici:
Crypt in C++ and Decrypt in C# (and C++)