我的值爲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