網站首頁 編程語言 正文
rsa 詳解及例題及python
算法原理
RSA公開密鑰密碼體制的原理是:根據數論,尋求兩個大素數比較簡單,而將它們的乘積進行因式分解卻極其困難,因此可以將乘積公開作為加密密鑰
算法描述
- 任意選取兩個不同的大素數p和q計算乘積 n=pq
- n 的歐拉函數 φ(n): φ(n)=(p-1)(q-1)
- 任意選取一個大整數e,滿足 gcd(e, φ(n))=1,整數e用做加密鑰
- (注意:gcd是最大公約數,e的選取是很容易的,例如,所有大于p和q的素數都可用)
- 確定的解密鑰d,滿足 (de) mod φ(n) = 1
- 公開整數n和e,秘密保存d
- 公鑰(n,e)
- 私鑰(n,d)
c:密文
m:明文
將明文 m 加密成密文c :c = m^e mod n
將密文 c 解密為明文m: m = c^d mod n
案例手稿
我可是開了計算器的,這手算不來???????? ,數據真實有效
實現python 運算
數據同手稿最后一個
m=71 -> c=15
import gmpy2
e = 13
p = 7
q = 11
m = 71 # 明文
n = p * q
phi = (p-1)*(q-1) # 求φ(n)
d = gmpy2.invert(e, phi) # 解密指數d
c = pow(m, e, n) # c = m^e mod n
print(c) # 15
c=15 -> m=71
import gmpy2
e = 13
p = 7
q = 11
c = 15 # 密文
n = p * q
phi = (p-1)*(q-1) # 求φ(n)
d = gmpy2.invert(e, phi) # 解密指數d
m = pow(c, d, n) # m = c^d mod n
print(m) # 71
正常的rsa c->m
import gmpy2
e = 65537
p = 164350308907712452504716893470938822086802561377251841485619431897833167640001783092159677313093192408910634151587217774530424780799210606788423235161145718338446278412594875577030585348241677399115351594884341730030967775904826577379710370821510596437921027155767780096652437826492144775541221209701657278949
q = 107494571486621948612091613779149137205875732174969005765729543731117585892506950289230919634697561179755186311617524660328836580868616958686987611614233013077705519528946490721065002342868403557070176752015767206263130391554820965931893485236727415230333736176351392882266005356897538286240946151616799180309
c = 17210571768112859512606763871602432030258009922654088989566328727381190849684513475124813364778051200650944085160387368205190094114248470795550466411940889923383014246698624524757431163133844451910049804985359021655893564081185136250014784383020061202277758202995568045817822133418748737332056585115499621035958182697568687907469775302076271824469564025505064692884524991123703791933906950170434627603154363327534790335960055199999942362152676240079134224911013272873561710522794163680938311720454325197279589918653386378743004464088071552860606302378595024909242096524840681786769068680666093033640022862042786586612
n = p * q
phi = (p - 1) * (q - 1)
d = gmpy2.invert(e, phi)
# print(d)
# d = 10095641463285806689688988669044958090788365778905483762638208789928575529502449849401292767726529997650439299015629157860588641396532350448192417234115775710546923180797320293516940576508757762754018567918113024001776672047516740167084526876904933632661036267682605889561715539758853760422969139832554919002326234307334716814878144233472982025457216787932684627988735853402622522302446460089411169271999550088279345136169249058325303590053665436848597082040492623325205128048625400148897314726782189085723532731019805440603017682798178125617958332012328823973231309306940239141155633610022544319334662491790481464305
m = pow(c, d, n) # m = c^d mod n
print(m)
# m = 164244530130068579551298796969937831989529603092769
m->c
import gmpy2
e = 65537
p = 164350308907712452504716893470938822086802561377251841485619431897833167640001783092159677313093192408910634151587217774530424780799210606788423235161145718338446278412594875577030585348241677399115351594884341730030967775904826577379710370821510596437921027155767780096652437826492144775541221209701657278949
q = 107494571486621948612091613779149137205875732174969005765729543731117585892506950289230919634697561179755186311617524660328836580868616958686987611614233013077705519528946490721065002342868403557070176752015767206263130391554820965931893485236727415230333736176351392882266005356897538286240946151616799180309
m = 164244530130068579551298796969937831989529603092769
n = p * q
phi = (p - 1) * (q - 1)
d = gmpy2.invert(e, phi)
# print(d)
# d = 10095641463285806689688988669044958090788365778905483762638208789928575529502449849401292767726529997650439299015629157860588641396532350448192417234115775710546923180797320293516940576508757762754018567918113024001776672047516740167084526876904933632661036267682605889561715539758853760422969139832554919002326234307334716814878144233472982025457216787932684627988735853402622522302446460089411169271999550088279345136169249058325303590053665436848597082040492623325205128048625400148897314726782189085723532731019805440603017682798178125617958332012328823973231309306940239141155633610022544319334662491790481464305
c = pow(m, e, n) # c = m^e mod n
print(c)
# c=17210571768112859512606763871602432030258009922654088989566328727381190849684513475124813364778051200650944085160387368205190094114248470795550466411940889923383014246698624524757431163133844451910049804985359021655893564081185136250014784383020061202277758202995568045817822133418748737332056585115499621035958182697568687907469775302076271824469564025505064692884524991123703791933906950170434627603154363327534790335960055199999942362152676240079134224911013272873561710522794163680938311720454325197279589918653386378743004464088071552860606302378595024909242096524840681786769068680666093033640022862042786586612
安全性
RSA的安全性依賴于大數分解,但是否等同于大數分解一直未能得到理論上的證明,也并沒有從理論上證明破譯。RSA的難度與大數分解難度等價
RSA算法的保密強度隨其密鑰的長度增加而增強。但是,密鑰越長,其加解密所耗用的時間也越長。因此,要根據所保護信息的敏感程度與攻擊者破解所要花費的代價值不值得以及系統所要求的反應時間來綜合考慮
運算速度
由于進行的都是大數計算,使得RSA最快的情況也比DES慢上好幾倍,無論是軟件還是硬件實現。速度一直是RSA的缺陷。
一般來說只用于少量數據加密。RSA的速度比對應同樣安全級別的對稱密碼算法要慢1000倍左右
原文鏈接:https://blog.csdn.net/qq_52549196/article/details/123491446
相關推薦
- 2022-11-24 React?HOC高階組件深入講解_React
- 2022-08-16 Hive常用日期格式轉換語法_數據庫其它
- 2022-07-06 如何利用python創建、讀取和修改CSV數據文件_python
- 2024-02-28 UNI-APP,設置某個頁面橫屏后,恢復豎屏,返回再次進入其他頁面時,頁面內容放大錯亂
- 2023-07-05 Spring Boot 啟動報錯 XXX\Tomcat\apache-tomcat-9.0.65\b
- 2022-06-08 記一次網站全站http升級為https的過程,websocket : ws升級為wss遇到的問題等
- 2023-07-18 A component required a bean of type ‘xxx‘ that cou
- 2022-09-24 C#/VB.NET實現PPT或PPTX轉換為圖像功能_C#教程
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支