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
答案 0 :(得分:2)
This codeproject文章似乎符合您的需求。如文章所示,C#在System.Security.Cryptography中有一个RSACryptoServiceProvider类,使事情变得更容易,因此您不必滚动整个解决方案并手动翻译所有代码。
答案 1 :(得分:1)
如果您有兴趣,我在 C ++ 和 C#中写了一篇关于 RSA 的文章。
它包含代码以及让RSA以两种语言工作,在它们之间交换密钥和消息所需要知道的所有内容:)。
你可以在这里找到它:
Crypt in C++ and Decrypt in C# (and C++)