简单随机与亦或

###2022DASCTF Apr X FATE 防疫挑战赛

##CRYPTO

#easy_real

题目

复制代码
import random
import hashlib

flag = 'xxxxxxxxxxxxxxxxxxxx'
key = random.randint(1,10)
for i in range(len(flag)):
    crypto += chr(ord(flag[i])^key)
m = crypto (ascii的16进制)
e = random.randint(1,100)
print(hashlib.md5(e))
p = 64310413306776406422334034047152581900365687374336418863191177338901198608319
q = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
n = p*q
c = pow(m,e,n)
print(n)
print(c)
#37693cfc748049e45d87b8c7d8b9aacd
#4197356622576696564490569060686240088884187113566430134461945130770906825187894394672841467350797015940721560434743086405821584185286177962353341322088523
#3298176862697175389935722420143867000970906723110625484802850810634814647827572034913391972640399446415991848730984820839735665233943600223288991148186397
复制代码

1、简单求出一些变量

MD5-->e=23
q=n/p-->q=65267138038038699886916162739434586079731613825212388229424706115289974540917

2、写代码

复制代码
import gmpy2
from Crypto.Util.number import * p=64310413306776406422334034047152581900365687374336418863191177338901198608319 e=23 n=4197356622576696564490569060686240088884187113566430134461945130770906825187894394672841467350797015940721560434743086405821584185286177962353341322088523 c=3298176862697175389935722420143867000970906723110625484802850810634814647827572034913391972640399446415991848730984820839735665233943600223288991148186397 q=65267138038038699886916162739434586079731613825212388229424706115289974540917 phi = (p-1)*(q-1) d = gmpy2.invert(e,phi) m = pow(c,d,n) print(m) print(long_to_bytes(m)) #2976168736142380455841784134407431434784057911773423743751382131043957 #b'ndios_;9kgE;WK8e;W?gWn<\\;k|nu' crypto='ndios_;9kgE;WK8e;W?gWn<\\;k|nu' flag='' for key in range(1,10): for i in range(len(crypto)): flag += chr(ord(crypto[i])^key)#(ord():字符转为十进制;chr():十进制或十六进制转化为字符) print(flag)
复制代码

3、解得:flag{W31coM3_C0m3_7o_f4T3ctf}

oehnr^:8jfD:VJ9d:V>fVo=]:j}otlfkmq]9;ieG9UI:g9U=eUl>^9i~lwmgjlp\8:hdF8TH;f8T<dTm?_8hmvj`mkw[?=ocA?SO<a?S;cSj8X?oxjqkaljvZ><nb@>RN=`>R:bRk9Y>nykphboiuY=?maC=QM>c=Q9aQh:Z=mzhsicnhtX<>l`B<PL?b<P8`Pi;[<l{irflag{W31coM3_C0m3_7o_f4T3ctf}gm`fzV20bnL2^B1l2^6n^g5U2bug|

 4、攻击原理

复制代码
1、通过md5解码获得e的值
2、已知p、q、e、c求得m(最简单的RSA题型)
步骤 说明 描述
1 选择一对不相等且足够大的质数 p、q
2 计算p、q的乘积 n=p*q
3 计算n的欧拉函数 φ(n)=(p-1)*(q-1)
4 选一个与φ(n)互质的整数e 1<e<φ(n)
5 计算出e对于φ(n)的模反元素d de mod φ(n)=1
6 公钥 (加密数据) KU=(e,n)
7 私钥 (解密数据) KR=(d,n)

 

欧拉函数:小于n的正整数中与n互质的数的数目φ(n)=n-1

互质:公约数只有1的两个整数

如果n可以分解为2个互质的整数之积,那么n的欧拉函数等于这两个因子的欧拉函数之积。及若n=p*q,且p、q互质,则φ(n)=φ(p*q)=φ(p)*φ(q)=(p-1)*(q-1)

 

如果两个正整数e和φ(n)互质,那么一定可以找到一个整数d,使得ed-1被φ(n)整除,或者说ed除以φ(n)所得余数为1,此时d就叫做e的模反元素。

d = gmpy2.invert(e,φ(n)) # 求逆元,ed ≡ 1 mod φ(n)

 

明文 M 加密 M**e mod n=C
密文 C 解密 C**d mod n=M

模运算(单向函数):单项计算容易,逆向反推却很难

 

3、异或(^):当两对应的二进位相异时,结果为1
复制代码

 

 

 
posted @   Jjyyyyy  阅读(294)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示