C# 用C语言生成RSA私钥#

C# 用C语言生成RSA私钥#,c#,encryption,cryptography,rsa,C#,Encryption,Cryptography,Rsa,我有p、q、n和e的值,并希望计算私钥d。我该怎么做,有人能给我一个C代码的例子吗?我使用一个biginger类来表示p、q、n和e的值,因此我假设d也将是biginger。来自: 确定满足同余关系的d(使用模运算) 换言之,埃德− 1可平均除以总和(p− 1) (q)− 1) 这通常使用扩展的欧几里德算法进行计算 d保持为私钥指数 扩展的欧几里德算法允许您查找整数,以便满足以下条件: 当a和b是互质时,扩展的欧几里德算法特别有用,因为x是模b的模乘逆 在这个公式中,将a设置为e,b设

我有
p
q
n
e
的值,并希望计算私钥
d
。我该怎么做,有人能给我一个C代码的例子吗?我使用一个
biginger
类来表示
p
q
n
e
的值,因此我假设d也将是
biginger

来自:

确定满足同余关系的d(使用模运算)

  • 换言之,埃德− 1可平均除以总和(p− 1) (q)− 1)
  • 这通常使用扩展的欧几里德算法进行计算
  • d保持为私钥指数

扩展的欧几里德算法允许您查找整数,以便满足以下条件:

当a和b是互质时,扩展的欧几里德算法特别有用,因为x是模b的模乘逆

在这个公式中,将
a
设置为
e
b
设置为
(p-1)(q-1)
gcd(a,b)
设置为1(因为在RSA算法中e和φ(pq)必须是互质),并求解
x
,从而得到
d
。 上的Wikipedia页面提供了有关如何编写求解x和y的算法的更多详细信息。例如,您可以使用此递归函数(在伪代码中):

在.NET中,如果您只想生成一些RSA密钥,您不必自己实现RSA算法。在.NET framework中已经有一个RSA的实现,您可以使用它

    • 我就是这样做的

      素数p=7和q=17

      计算n=p*q=119

      计算f(n)=(p-1)*(q-1)=96


      计算d=e^-1模f(n),例如,d=77短的方法是计算e模(p-1)*(q-1)的逆。实际上,您只需要p-1和q-1的最小公倍数,但这不会给您带来太多好处(是的,d有几个可能的值,这是正常的,它们都是等价的)


      如果您的
      biginger
      类有一个模块化的逆方法,那么这将很容易:只需调用它。否则,您将不得不使用扩展的欧几里德算法(这是
      biginger
      类用来计算模逆的方法)。

      我知道如何从头开始生成密钥,但出于好奇,我正在尝试从上述值恢复d。
      function extended_gcd(a, b)
          if a mod b = 0
              return {0, 1}
          else
              {x, y} := extended_gcd(b, a mod b)
              return {y, x-(y*(a div b))}