从零开始学RSA: Ordinary keyboard等3题

11 Ordinary keyboard

https://blog.csdn.net/weixin_48427966/article/details/119173622

李磊是一名程序员,在他的笔记本里有一些这样的记录:
QQ:iloveyou521
blog:blog132
wechat:wechat190

看着应该像是密码,于是尝试去登录,发现密码错误
后来一打听,原来他将这些密码经过自己写的一个简单的加密算法变成真实的密码,而自己笔记本中存放的只是一些虚假的密码,只是方便记忆而已

其真实密码如下:
QQ:+p)g$_)'521
blog:hp)u132
wechat:A$ezr&190

hint:Caesar

flag is spru.r5sf3h7660h7394e169699hffe0s0h$4,

Please restore the real flag
python 复制代码
def decry(cipher):
    strs1 = "asdfghjkl;qwertyuiop!@#$%^&*()-+"
    strs2 = "zxcvbnm,./asdfghjkl;qwertyuiop{}"
    dir = dict(zip(strs1,strs2))
    num = "0123456789"
    res = ""
    for i in cipher:
        if i not in num:
            res += dir[chr(ord(i)-1)]
        else:
            res += i
 
    return res
 
 
def main():
    cipher = "spru.r5sf3h7660h7394e169699hffe0s0h$4,"
    print(decry(cipher))
 
 
if __name__ == '__main__':
    main()

flag{a5fd3b7660b7394c169699bddc0f0be4}

12 dpdqdr

python 复制代码
#coding:utf-8
import gmpy2
from Crypto.Util.number import *

p = getPrime(512)
q = getPrime(512)
r = getPrime(512)
e = getPrime(32)
n = p*q*r
phi = (p-1)*(q-1)*(r-1)
d = gmpy2.invert(e,phi)
dp = d%((q-1)*(r-1))
dq = d%((p-1)*(r-1))
dr = d%((p-1)*(q-1))
flag = 'DASCTF{XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX}'+PADDING
m = bytes_to_long(flag.encode())
c = pow(m,e,n)

print(p)
print(q)
print(r)
print(dp)
print(dq)
print(dr)
print(c)

#12922128058767029848676385650461975663483632970994721128398090402671357430399910236576943902580268365115559040908171487273491136108931171215963673857907721
#10395910293559541454979782434227114401257890224810826672485874938639616819909368963527556812339196570118998080877100587760101646884011742783881592586607483
#8104533688439480164488403019957173637520526666352540480766865791142556044817828133446063428255474375204188144310967625626318466189746446739697284656837499
#73360412924315743410612858109886169233122608813546859531995431159702281180116580962235297605024326120716590757069707814371806343766956894408106019058184354279568525768909190843389534908163730972765221403797428735591146943727032277163147380538250142612444372315262195455266292156566943804557623319253942627829
#40011003982913118920477233564329052389422276107266243287367766124357736739027781899850422097218506350119257015460291153483339485727984512959771805645640899525080850525273304988145509506962755664208407488807873672040970416096459662677968243781070751482234692575943914243633982505045357475070019527351586080273
#21504040939112983125383942214187695383459556831904800061168077060846983552476434854825475457749096404504088696171780970907072305495623953811379179449789142049817703543458498244186699984858401903729236362439659600561895931051597248170420055792553353578915848063216831827095100173180270649367917678965552672673
#220428832901130282093087304800127910055992783874826238869471313726515822196746908777026147887315019800546695346099376727742597231512404648514329911088048902389321230640565683145565701498095660019604419213310866468276943241155853029934366950674139215056682438149221374543291202295130547776549069333898123270448986380025937093195496539532193583979030254746589985556996040224572481200667498253900563663950531345601763949337787268884688982469744380006435119997310653
python 复制代码
from sympy.ntheory.modular import crt
from gmpy2 import iroot,invert
from Crypto.Util.number import *
p = 12922128058767029848676385650461975663483632970994721128398090402671357430399910236576943902580268365115559040908171487273491136108931171215963673857907721
q = 10395910293559541454979782434227114401257890224810826672485874938639616819909368963527556812339196570118998080877100587760101646884011742783881592586607483
r = 8104533688439480164488403019957173637520526666352540480766865791142556044817828133446063428255474375204188144310967625626318466189746446739697284656837499
dp = 73360412924315743410612858109886169233122608813546859531995431159702281180116580962235297605024326120716590757069707814371806343766956894408106019058184354279568525768909190843389534908163730972765221403797428735591146943727032277163147380538250142612444372315262195455266292156566943804557623319253942627829
dq = 40011003982913118920477233564329052389422276107266243287367766124357736739027781899850422097218506350119257015460291153483339485727984512959771805645640899525080850525273304988145509506962755664208407488807873672040970416096459662677968243781070751482234692575943914243633982505045357475070019527351586080273
dr = 21504040939112983125383942214187695383459556831904800061168077060846983552476434854825475457749096404504088696171780970907072305495623953811379179449789142049817703543458498244186699984858401903729236362439659600561895931051597248170420055792553353578915848063216831827095100173180270649367917678965552672673
c = 220428832901130282093087304800127910055992783874826238869471313726515822196746908777026147887315019800546695346099376727742597231512404648514329911088048902389321230640565683145565701498095660019604419213310866468276943241155853029934366950674139215056682438149221374543291202295130547776549069333898123270448986380025937093195496539532193583979030254746589985556996040224572481200667498253900563663950531345601763949337787268884688982469744380006435119997310653
N = [(q-1)*(r-1),(p-1)*(r-1),(p-1)*(q-1)]
C = [dp,dq,dr]
phi = (p-1)*(q-1)*(r-1)
d = crt(N,C)[0]#中国剩余定理,返回的第一个数是结果
e = invert(d,phi)
n = p * q * r
m = pow(c,d,n)
print(long_to_bytes(m)) 

b'DASCTF{8ec820e5251db6e7a1758543a1123824}

13 crypto_threshold(待更)

python 复制代码
import random
from sympy import nextprime
from Crypto.Util.number import *
from secret import flag
from gmpy2 import gcd

def lcg(seed,params):
    (m,c,n)=params
    s = seed % n
    while True:
        s = (m * s + c) % n
        yield s
    

seed = getPrime(128)
m = getPrime(128)
c = getPrime(128)
n = getPrime(129)

print(m,c,n)
key_stream = lcg(seed,(m,c,n))
num=[]
for _ in range(6):
	num.append(next(key_stream))
	
print(num)
secret =  next(key_stream)

e = nextprime(secret)
p = getPrime(1024)
q = getPrime(1024)


_lambda = ((p-1)*(q-1)) / gcd(p-1,q-1)

flag = bytes_to_long(flag)


print(_lambda)
print(p*q)
print(pow(flag,e,p*q))
        
'''
(315926151576125492949520250047736865439L, 204423972944032372640132172728460755543L, 375402477603617093440157245062608289367L)
[345100389799760820174075838471701328893L, 354616152072197410104284828964580660629L, 262223452907927780613453340112396026524L, 36884243358932605284421044617284274488L, 293840768243490066897038832083154668562L, 287868671713011127830359814204794790287L]
457872764421730558978217109311884057410311335293040789670930865953404030084212226269947268155086034859079522508205099945996505165612539895857134158846470122889806235716457030336629794120415334028017836171608283093853784030348654118118278878881245838363354935523654666907698225985634469947076411404657018958617661794208646954882326918608011132295868155254980231015984288966599987516188265570396237695988003707515471895679008794498548940902202079105268931791776841539932961070351617834137017590635300615537152347169984974533340989459692132455611998382465644967355506104871655788359202461542101480022365857889833055840
27472365865303833538693026558713043444618680117582447380255851957204241805052733576196836089305162091544771350492305996759790309936752393751428049530788207373388374142987421820197787647224920041681070170296496985631227041820919247087096732732874750301801296131419280014461893559138068196824584684279421137517391204355597563871480257589096606865035259322614687417246708249170470689983675108996118328359454354818425772935513344465778617739729440207409124134831968562495435786944862849412776010947330752600405451073822977981611026975129395818269513358936682934286140359273764118787152676411486767003233858544159511154941
7187920142528335824861143203876908084067528690298329755497671248322277194754277305701102880967402859593937177306927235921616059382304183094350022713118203435560220591865274025991334717202171313133285253575822615616032441398946742994706880814251670668924098240782583026655923033371628284132606950034409888896558825512875084001031123558055489119898334591442547695833103046341283479780998109787754685881665949269402489768629140076361688313079919123642491566639820702501701460474001196941883819620040361365999896847153131825439764785309224799365130821807533936571946283436139142085798584001786665762720472918598961576836
'''

https://blog.csdn.net/weixin_45883223/article/details/112427962
python 复制代码
from libnum import *
from gmpy2 import *
from sympy import nextprime
from binascii import *
s = [58605992502479537155943965904595921273, 525605798656979919420608964379033982804, 607738431135489138748992347244318940466, 631747898536603358381419028993140907216, 13450658701001781564543219325486287717, 407826262741495712819054543462943222370]
t = []
for i in range(6):
    t.append(s[i]-s[i-1]) 
all_n = []
for i in range(4):
    all_n.append(gcd((t[i+1]*t[i-1]-t[i]*t[i]), (t[i+2]*t[i]-t[i+1]*t[i+1]))) 
MMI = lambda A, n,s=1,t=0,N=0: (n < 2 and t%N or MMI(n, A%n, t, s-A//n*t, N or n),-1)[n<1] #逆元计算
for n in all_n:
    n=abs(n)
    if n==1:
        continue
    a=(s[2]-s[1])*MMI((s[1]-s[0]),n)%n
    ani=MMI(a,n)
    b=(s[1]-a*s[0])%n
    seed = (ani*(s[0]-b))%n
    # print(a)
    # print(b)
    # print(n)
# 38
# 38
# 247
# 3597311607935701017482672939549215869312
# 991116632052036749507348612776709448638
# 3950899672996886162483756947829969794506
# 304895213771629215412875483024241040557
# 332633353219222389093389121471714482887
# 658483278832814360413959491304994965751
m = 304895213771629215412875483024241040557
c = 332633353219222389093389121471714482887
n = 658483278832814360413959491304994965751
secret = (m * s[5] + c) % n
e = nextprime(secret)
p = 138092450043978032187397495330379791355629274237204650898232878263413301988536751004632087169676028049236253598677819980191406826529664613957150122788435561338344715937422320958238628877093605040078776555586363593650646481242888908171897232624141894446324625781720275455534977357099473212936612966142541689717
cipher = 40522976224675404992818282038409183193065303107530049168092540620105120083552580372904554927069109321998620410524986748598618388761467715127564839742806614159382512978830563949967053562802375030363283879451081474764301602860367140250483857874335594802704634427276762179861996608105102610424633434334897307449739846880323406404392707133580686043181007091235341464802410874449708870610192494627811013526751435468963111672237058189288520084494533786573065843704621915085789731723587760910378534773137633519620193203450046994466154848079413319979993890764583887936777316159487010002407093187269512820453207591173395762513970799972839858119501585885277954258269483363133460240339866272358522431904252286259542327658731232568465990008278265227086114042064326334937705758042097987623388556184022737180944807660792992413039097516526454455063218161704505837882378018400687043158628503465274374703624257222504948612055237771581019005
d = invert(e, (p-1))
flag = pow(cipher, d, p)
_flag = ''
for i in range(len(bin(flag)[2:])):
    j = i
    k = int(bin(flag)[2:][i])
    while j >= 10:
        j -= 10
        k ^= int(bin(flag)[2:][j])
    _flag += str(k)
print(n2s(int(_flag, 2)))
# DASCTF{b19998fb5acd197e441029b37bc246d7}
相关推荐
Mitch311几秒前
【漏洞复现】CVE-2015-5531 Arbitrary File Reading
web安全·elasticsearch·网络安全·docker·漏洞复现
ccc_9wy15 分钟前
暗月红队考核靶场ack123的测试报告[细节](二)
网络安全·暗月ack123·socks5内网代理·mssql漏洞·杀软对抗·制作免杀木马·烂土豆提权
古希腊掌管学习的神19 分钟前
[搜广推]王树森推荐系统笔记——曝光过滤 & Bloom Filter
算法·推荐算法
qystca20 分钟前
洛谷 P1706 全排列问题 C语言
算法
Kai HVZ22 分钟前
python爬虫----爬取视频实战
爬虫·python·音视频
古希腊掌管学习的神24 分钟前
[LeetCode-Python版]相向双指针——611. 有效三角形的个数
开发语言·python·leetcode
浊酒南街26 分钟前
决策树(理论知识1)
算法·决策树·机器学习
m0_7482448327 分钟前
StarRocks 排查单副本表
大数据·数据库·python
就爱学编程33 分钟前
重生之我在异世界学编程之C语言小项目:通讯录
c语言·开发语言·数据结构·算法
B站计算机毕业设计超人34 分钟前
计算机毕业设计PySpark+Hadoop中国城市交通分析与预测 Python交通预测 Python交通可视化 客流量预测 交通大数据 机器学习 深度学习
大数据·人工智能·爬虫·python·机器学习·课程设计·数据可视化