蓝桥杯一个填空题是rsa,python也没跑出来,回来又学了学rsahtml
这个讲的很清楚,证实啥的都很清晰,(证实中,m与n不互质时,ed两次带入,彷佛不必。)python
连接:https://blog.csdn.net/u014044812/article/details/80866759加密
其中附加的展转相除法,手算ax+by=1这种式子也会了。spa
举个百度的例子:.net
import rsa,sys from rsa import common #(pub_key,pri_key) = rsa.newkeys(256) #m = b'hello' #crpto = rsa.encrypt(m,pub_key) #print(len(crpto),common.byte_size(pub_key.n)) #print(pri_key) #print(sys.argv[0]) pri_k = open('rsa_private_key.pem','r').read() #print(pri_k,'1') #print("--------------------------------------------------") pri_key = rsa.PrivateKey.load_pkcs1(pri_k) #print(pri_key) c = open('flag.encrypt','rb').read() m = rsa.decrypt(c,pri_key) print(m)
第二个:3d
找到了一个知乎的解法,而后n,e,d,p,q都同样,解密失败。。。code
我就是解密失败。。无语orm
而后找到了一个博客上面是本身实现解密方法,而后调用。htm
我又试了试,本身写了个。blog
由于rsa解密在获得了私钥后,其实就是带mod的快速幂
而后解成功了,可是解码显示没出来,python3 str没有decode方法。
因而想到了以前bytes2int()会不会有反向的,由于bytes有decode
而后发现真有,就很愉悦了。
转为bytes后decode就出来了。
至于如何获得的n,e,p,q,d参考我以前写的随笔:https://www.cnblogs.com/zhibin123/p/10590743.html
# -*- coding:utf-8 -*- import gmpy2 import rsa from rsa import transform,core def fastMod(c,d,n): t = c res = 1 while d: if d & 1: res = (res * t)%n t = ( t * t ) % n d>>=1 return res def decrytption(c,d,n): return fastMod(c,d,n) q = 319576316814478949870590164193048041239 p = 275127860351348928173285174381581152299 n = 87924348264132406875276140514499937145050893665602592992418171647042491658461 e = 65537 d = int(gmpy2.invert(e,(p-1) * (q-1))) pri_key = rsa.PrivateKey(n,e,d,p,q) c = open('flag.encrypt','rb').read() print(c) c = transform.bytes2int(c) print(c) m = decrytption(c,d,n) print(m,type(m)) flag = transform.int2bytes(m).decode() print(flag)