我的值为p
,q
,n
和e
并且想要计算私钥d
。我怎么能这样做,有人可以给我的例子C#代码?我正在使用BigInteger
类来表示p
,q
,n
和e
的值,所以我假设d也将是BigInteger
。在C中生成私有RSA密钥#
6
A
回答
1
短方式是计算È模的逆(P-1)*(Q-1)。其实你只需要p-1和q-1的最小公倍数,但这不会给你买太多(是的,d有几个可能的值,这是正常的,它们都是等价的) 。
如果您的BigInteger
类具有模块化逆方法,那么这将很容易:只需调用它即可。否则,你将不得不使用扩展欧几里德算法自己计算它(这是BigInteger
类倾向于用来计算模块反转的东西)。
3
确定d(使用模算术)满足全等关系
- 换句话说,ED - 1可以被均匀地由欧拉除以(P - 1) (q - 1)。
- 这通常使用扩展的欧几里得算法来计算。
- d保持为私钥指数。
扩展欧几里德算法可以让你找到整数,这样使得下式成立:
扩展欧几里德算法是特别有用,当a和b是互质,因为x是模b的模乘法逆。
在这个公式设置a
到e
,b
到(p-1)(q-1)
和gcd(a, b)
为1(因为需要e和φ(PQ)在RSA算法进行互质)和解决x
,让你的d
。 维基百科页面extended Euclidean algorithm有关于如何编写算法来解决x和y的更多细节。例如,你可以使用这个递归函数(伪代码):
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))}
在.NET中,如果你只是想生成你不必自己实现RSA算法的一些RSA密钥。在.NET框架中已经有了一个可以使用的RSA实现。
1
这是我做到了。
素数p = 7和q = 17
计算N = P * Q = 119
计算F(N)=(P-1)*(Q-1)= 96
计算d = e^-1 mod f(n),例如峰,d = 77
相关问题
- 1. 如何加密生成的RSA私钥并在c#中解密
- 2. C RSA密钥生成器
- 3. RSA密钥生成
- 4. RSA解密的私钥C++
- 5. C#RSA加密与私钥
- 6. C#OpenSSL RSA私钥加密
- 7. 在生成公钥/私钥之前关闭RSA加密force
- 8. Objective C Secure.h RSA密钥对生成
- 9. RSA算法密钥生成
- 10. 生成RSA密钥对并将私钥编码为字符串
- 11. 如何在Dart中生成RSA密钥?
- 12. 如何使用用密码加密的私钥生成RSA密钥对?
- 13. C#RSA使用私钥解密
- 14. RSA加密 - 用私钥
- 15. .NET私钥Rsa加密
- 16. 的Javascript RSA解密私钥
- 17. 使用RSA私钥解密
- 18. 使用RSA公钥和私钥在C#中加密数据
- 19. 生成私有RSA私钥并以编程方式设置密码短语
- 20. 错误RSA密钥对生成Java中
- 21. Bouncycastle加密私钥PEM输出:RSA私钥与私钥
- 22. C#bouncy castle生成rsa客户端/服务器rsa密钥对
- 23. 加密:使用模和指数生成RSA私钥
- 24. 导入使用GnuPG生成到C#中的RSA私钥
- 25. AES密钥和iv来自RSA私钥
- 26. 使用RSA私钥创建密钥库
- 27. 使用RSA公钥加密DSA私钥
- 28. 在加密++中加载PEM编码的私有RSA密钥
- 29. Phpseclib在会话中生成RSA密钥(使用C#客户端)
- 30. c#RSA从私钥中提取公钥
我知道如何从头开始生成密钥,但出于好奇心我试图从上述值恢复d。 – b3n 2010-09-18 08:54:46