C# RSA 等效于 C++ Crypto API 的代码

Posted

技术标签:

【中文标题】C# RSA 等效于 C++ Crypto API 的代码【英文标题】:C# RSA equivalent code to the C++ Crypto API 【发布时间】:2009-03-25 04:22:38 【问题描述】:
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

【问题讨论】:

希望有帮助:How to generate key pairs, encrypt and decrypt data with CryptoAPI 【参考方案1】:

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

【讨论】:

感谢您的评论。我知道如何使用 RSACryptoServiceProvider。但是 RSACryptoServiceProvider 类上与上述 Crypto API 调用等效的方法是什么。 您可以使用来自red-gate.com/products/reflector 的.NET Reflector 查看所有内容:)【参考方案2】:

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

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

【讨论】:

以上是关于C# RSA 等效于 C++ Crypto API 的代码的主要内容,如果未能解决你的问题,请参考以下文章

C++ typedef struct 等效于 C#

C# 等效于 C++ map<string,double>

Qt C++ 等效于具有自定义格式的 C# toString

C++ ULONG 定义为 VB.NET 还是 C# 等效?

等效于 Java 的 DirectByteBuffer 的 C# 方法

Excel C API 等效于 C# 中的 Interop Range.Value