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 调用特别感兴趣。请注意,使用的加密方法是 RSA

4

2 回答 2

2

这篇codeproject 文章似乎符合您的需求。如文章中所示,C# 在 System.Security.Cryptography 中有一个RSACryptoServiceProvider类,使事情变得更容易一些,因此您不必滚动整个解决方案并手动翻译所有代码。

于 2009-03-25T04:25:10.780 回答
1


如果您有兴趣,我在C++C#中 写了一篇关于RSA的文章。它包含代码以及让 RSA 在两种语言中工作、在它们之间交换密钥和消息所需知道的一切:)。

你可以在这里找到它:
Crypt in C++ 和 Decrypt in C# (and C++)

于 2011-04-21T15:55:56.990 回答