【发布时间】:2012-07-31 23:39:05
【问题描述】:
几天来,我一直试图在 C++ 中获得与此 C# 代码等效的代码,但没有成功。
这是我的 C# 代码:
RSAParameters rsaParams = new RSAParameters();
rsaParams.Modulus = someByteArray;
rsaParams.Exponent = someByteArray1;
rsaParams.D = someByteArray2;
rsaParams.DP = someByteArray3;
rsaParams.DQ = someByteArray4;
rsaParams.P = someByteArray5;
rsaParams.Q = someByteArray6;
rsaParams.InverseQ = someByteArray7;
using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider())
{
rsa.ImportParameters(rsaParams);
byte[] encryptedData = rsa.Encrypt(toEncrypt, false);
}
我只想得到完全相同的结果,但使用 C++(跨平台)。我查看了许多库/类,但它们似乎并不合理。首先,Crypto++ 非常棒,但我想要的只是 RSA,所以在我看来,拥有他们所有的散列/加密/其他算法只是一种浪费。我找到了this 类,我认为这很好,因为它只是 RSA,而且非常小。问题是,参数的名称与 C# 的名称不同,或者它不支持它。我觉得我不应该仅仅为了实现它而学习每个参数在 RSA 中的含义,因为我只想在这里完成一个简单的任务。谢谢。
【问题讨论】:
-
你需要相同参数的原因是因为你有一个 C# 的前端和一个 C++ 的后端?
-
不,因为我只是用 C# 测试一些东西,而我的应用程序将使用 C++,所以我只需要把它转移过来。
-
由于您使用的 RSA 加密包括随机填充,即使您成功实现了正确、兼容的 C++ 版本,您也永远不会得到完全相同的结果。此外,RSA 加密只需要或使用前两个字段(模数和指数)。
-
好的,谢谢。但是假设我只想使用模数和指数。我怎么能生成其他的,因为如果我把其他的拿走(在 C# 中),它会抛出一个“坏键”。错误。