?相當於求壹元二次方程23 * d+192 * y = 1。
?其中壹個解是(d=167,y=-20)。
?到目前為止,所有的計算都已完成。
?對於上面的例子,到公鑰(221,23)和私鑰(221,167)。
在上面的計算過程中,使用了壹個* * *。
上述數只有公鑰部分是公開的,即(221,23)。那麽我們能不能推出私鑰部分,也就是已知的n和e,通過公鑰推出D?
(1)ed 1(mod (n)),D只有知道(n)才能求解。
(2)(n)=(p)(q)=(p-1)(q-1),只有知道p和q才能得到(n)。
(3)如果n = p q,則需要對n進行因式分解。
那麽如果妳能因式分解n,就能找到d,也就是說私鑰被破解了。
那麽RSA加密的可靠性就在於分解n的難度,現在還沒有分解壹個整數n的巧妙算法,只能靠蠻力。在實際應用中,n的值通常在1024位以上,而公知的最大因式分解數是768位。所以現階段RSA加密是可靠的。
現在我們可以加密和解密。
我們使用上面生成的公鑰(221,23)進行加密。如果我們需要加密的信息是m( m必須是整數,m應該小於n),取m為56,加密後的字符串C可以通過下面的公式得到:
?c(型號n)
?10(型號221)
可以發現加密結果C是10。
密鑰為(221,167),加密結果為c=10。可以通過使用以下公式獲得加密信息。
?M (mod n),即加密結果的d次方除以n的余數,為m。
?56(型號221)
RSA加密是壹種塊加密算法,它總是對固定長度的塊進行操作。如果加密的字符串太長,需要剪切,如果太短,需要填充。
下面主要介紹RSA_PKCS1_PADDING填充模式和RSA_NO_PADDING模式。
這種填充模式是最常用的填充模式。在這種填充模式下,輸入長度受加密密鑰長度的限制,最大輸入長度為加密密鑰的位數k-11。如果公鑰的長度是1024位,即128字節,那麽輸入長度最多是128-11 = 117字節。如果長度小於117,則需要填充。如果輸入T的長度是55字節,填充塊是EM,則EM格式如下:
EM= 0x00 || BT || PS || 0x00 || T
在這種填充模式下,輸入長度最多與RSA公鑰長度壹樣長,如果小於公鑰長度,將在前面填充0x00。如果公鑰長度為128字節,輸入T的長度為55字節,填充塊為EM,則EM的格式如下:
EM=P || T
參考:
/blog/2065 438+03/06/RSA _ algorithm _ part _ one . html
/blog/2065 438+03/07/RSA _ algorithm _ part _ two . html
/3pgp/blog/749195