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))}