【问题标题】:RSA C++ equivalent in C#C# 中的 RSA C++ 等效项
【发布时间】: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# 中),它会抛出一个“坏键”。错误。

标签: c++ rsa


【解决方案1】:

RSAParameters 结构的属性基于Chinese Remainder Algorithm。 你看过OpenSSL 加密库吗?

RSA 结构由几个 BIGNUM 组件组成。它可以 包含公钥和私钥:

struct
    {
    BIGNUM *n;              // public modulus
    BIGNUM *e;              // public exponent
    BIGNUM *d;              // private exponent
    BIGNUM *p;              // secret prime factor
    BIGNUM *q;              // secret prime factor
    BIGNUM *dmp1;           // d mod (p-1)
    BIGNUM *dmq1;           // d mod (q-1)
    BIGNUM *iqmp;           // q^-1 mod p
    // ...
    };
RSA

【讨论】:

  • 为什么我觉得设置起来很困难?我从openssl.org/source 下载了最新版本,并尝试从包含文件夹中包含“rsa.h”,这会导致错误……我一定在这里遗漏了很大一部分。
  • 如果您有 OpenSSL 问题,请尝试在此处或 OpenSSL Support, Mailing lists 上提问
  • @hetelek:以apps/rsa.c 源为例。你想要的函数是RSA_public_encrypt(),填充应该是RSA_PKCS1_PADDING,#defined 为1。
猜你喜欢
  • 1970-01-01
  • 2015-08-31
  • 1970-01-01
  • 2010-10-20
  • 2013-12-09
  • 1970-01-01
  • 2014-05-08
  • 2023-03-09
相关资源
最近更新 更多