RSA算法
2021/11/27 20:40:36
本文主要是介绍RSA算法,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
文章目录
- RSA算法
- 一、生成公钥和私钥
- 二、加密和解密
- 例题(难度由浅入深,笔者能力有限,之后学会难的会继续不上)
- 例题 1
- 例题2
RSA算法
一、生成公钥和私钥
1、随机生成两个随机素数P,Q
2、将P、Q两个素数相乘得到一个数N,即N=PQ(需要公开)
3、将P、Q分别减1再相乘得到一个数T,即T=(P-1)(Q-1)
4、选择一个数E,E满足和T互质且E小于T
5、根据DE mod T = 1计算出密钥D
6、通过以上步骤可以得到N,E,D这3个数字,其中(N、E)作为公钥,(N、D)作为私钥(公钥和私钥可以互换)
二、加密和解密
接受方将生成的公钥(N,E)对外发布
1、用公钥加密
发送方用接受到的公钥(N,E)对密文M加密
密文:M
加密:ME mod N = C
明文:C
2、用私钥解密
接受方用持有私钥(N,D)对明文C解密
明文:C
解密:CD mod N = M
密文:M
摘自https://blog.csdn.net/qq_22038259/article/details/112712260
例题(难度由浅入深,笔者能力有限,之后学会难的会继续不上)
例题 1
在一次RSA密钥对生成中,假设p=473398607161,q=4511491,e=17 求解出d作为flga提交
def ext_gcd(a, b): if b == 0: return 1, 0, a else: x, y, gcd = ext_gcd(b, a % b) # 递归直至余数等于0(需多递归一层用来判断) x, y = y, (x - (a // b) * y) # 辗转相除法反向推导每层a、b的因子使得gcd(a,b)=ax+by成立 return x, y, gcd def computeD(T, e): (x, y, r) = ext_gcd(T, e) #y maybe < 0, so convert it if y < 0: return T + y return y p = 473398607161 q = 4511491 T=(p-1)*(q-1) e=17 D=computeD(T,e) print(D)
例题2
Math is cool! Use the RSA algorithm to decode the secret message, c, p, q, and e are parameters for the RSA algorithm. p = 9648423029010515676590551740010426534945737639235739800643989352039852507298491399561035009163427050370107570733633350911691280297777160200625281665378483 q = 11874843837980297032092405848653656852760910154543380907650040190704283358909208578251063047732443992230647903887510065547947313543299303261986053486569407 e = 65537 c = 83208298995174604174773590298203639360540024871256126892889661345742403314929861939100492666605647316646576486526217457006376842280869728581726746401583705899941768214138742259689334840735633553053887641847651173776251820293087212885670180367406807406765923638973161375817392737747832762751690104423869019034 Use RSA to find the secret message
from gmpy2 import * from Crypto.Util.number import * def ext_gcd(a, b): if b == 0: return 1, 0, a else: x, y, gcd = ext_gcd(b, a % b) # 递归直至余数等于0(需多递归一层用来判断) x, y = y, (x - (a // b) * y) # 辗转相除法反向推导每层a、b的因子使得gcd(a,b)=ax+by成立 return x, y, gcd def decrypt(msg, d, n): return pow(msg, d, n) def computeD(T, e): (x, y, r) = ext_gcd(T, e) #y maybe < 0, so convert it if y < 0: return T + y return y p = 9648423029010515676590551740010426534945737639235739800643989352039852507298491399561035009163427050370107570733633350911691280297777160200625281665378483 q = 11874843837980297032092405848653656852760910154543380907650040190704283358909208578251063047732443992230647903887510065547947313543299303261986053486569407 e = 65537 c = 83208298995174604174773590298203639360540024871256126892889661345742403314929861939100492666605647316646576486526217457006376842280869728581726746401583705899941768214138742259689334840735633553053887641847651173776251820293087212885670180367406807406765923638973161375817392737747832762751690104423869019034 t = (p-1)*(q-1) n = p*q d = computeD(t, e) flag = decrypt(c, d, n) print(flag)
这篇关于RSA算法的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-13TiDB + ES:转转业财系统亿级数据存储优化实践
- 2024-05-09“2024鸿蒙零基础快速实战-仿抖音App开发(ArkTS版)”实战课程已上线
- 2024-05-09聊聊如何通过arthas-tunnel-server来远程管理所有需要arthas监控的应用
- 2024-05-09log4j2这么配就对了
- 2024-05-09nginx修改Content-Type
- 2024-05-09Redis多数据源,看这篇就够了
- 2024-05-09Google Chrome驱动程序 124.0.6367.62(正式版本)去哪下载?
- 2024-05-09有没有大佬知道这种数据应该怎么抓取呀?
- 2024-05-09这种运行结果里的10.100000001,怎么能最快改成10.1?
- 2024-05-09企业src漏洞挖掘-有意思的命令执行