Cryptohack刷题记录(四) Mathematics部分 Brainteasers Part 1 writeup
文章目录
- Mathematics
- Brainteasers Part 1
- 1. Successive Powers
- 2. Adrien's Signs
- 3. Modular Binomials
- 4. Broken RSA
Mathematics
Brainteasers Part 1
1. Successive Powers
给了一个数组
是x
的连续阶乘对p
取模的结果
p
为三位素数
记t=[588, 665, 216, 113, 642, 4, 836, 114, 851, 492, 819, 237]
则有
t 0 ∗ x ≡ t 1 m o d p t 1 ∗ x ≡ t 2 m o d p . . . t 10 ∗ x ≡ t 11 m o d p t_0*x\equiv t_1\mod p\\ t_1*x\equiv t_2\mod p\\ ...\\ t_{10}*x\equiv t_{11}\mod p t0∗x≡t1modpt1∗x≡t2modp...t10∗x≡t11modp
即
x = t 1 ∗ t 0 − 1 m o d p x = t 2 ∗ t 1 − 1 m o d p . . . x = t 11 ∗ t 10 − 1 m o d p x=t_1*t_0^{-1}\mod p\\ x=t_2*t_1^{-1}\mod p\\ ...\\ x=t_{11}*t_{10}^{-1}\mod p\\ x=t1∗t0−1modpx=t2∗t1−1modp...x=t11∗t10−1modp
p为三位素数,直接爆破即可
t = [588, 665, 216, 113, 642, 4, 836, 114, 851, 492, 819, 237]
pmin = max(t)+1for p in trange(pmin,0x3f3f3f3):try:x = [(t[i]*invert(t[i-1],p))%p for i in range(1,ll)]if len(set(x)) == 1:print(p,x)except:pass
结果p=919,x=209
flag为crypto{p,x}
2. Adrien’s Signs
加密函数
随机量为n,为指数部分
使用离散对数sympy.discrete_log
exec('c='+open("D:\\Downloads\\output_80fc6398d2fd9f272186d0af510323f9.txt").read())
from sympy import discrete_log as dl
from tqdm import *
ff = ''
for i in trange(len(c)):cc = c[i]try:r = dl(p,cc,a)ff += '1'except:r = dl(p,-cc%p,a)ff += '0'
print(ff)
from number import *
print(l2b(int(ff,2)))
3. Modular Binomials
给了N,e1,e2,c1,c2,要求得p,q
Factordb能分解
4. Broken RSA
给了n,e,c
注意到e为16,并且有
m e ≡ c m o d n ( m 8 ) 2 ≡ c m o d n m^e\equiv c\mod n\\ (m^8)^2\equiv c\mod n me≡cmodn(m8)2≡cmodn
题目已经明确的给了提示
If you think you’re doing the right thing but getting garbage, be sure to check all possible solutions.
注意,这个方程会有两个解,两个都要考虑并进行下一步计算。
第一步能得到 m 8 m^8 m8 的值,记为r8,以此类推,有
( m 4 ) 2 ≡ r 8 m o d n ( m 2 ) 2 ≡ r 4 m o d n m 2 ≡ r 2 m o d n (m^4)^2\equiv r8\mod n\\ (m^2)^2\equiv r4\mod n\\ m^2\equiv r2\mod n (m4)2≡r8modn(m2)2≡r4modnm2≡r2modn
由此解出m
的值
# Sage
n = 27772857409875257529415990911214211975844307184430241451899407838750503024323367895540981606586709985980003435082116995888017731426634845808624796292507989171497629109450825818587383112280639037484593490692935998202437639626747133650990603333094513531505209954273004473567193235535061942991750932725808679249964667090723480397916715320876867803719301313440005075056481203859010490836599717523664197112053206745235908610484907715210436413015546671034478367679465233737115549451849810421017181842615880836253875862101545582922437858358265964489786463923280312860843031914516061327752183283528015684588796400861331354873
e = 16
ct = 11303174761894431146735697569489134747234975144162172162401674567273034831391936916397234068346115459134602443963604063679379285919302225719050193590179240191429612072131629779948379821039610415099784351073443218911356328815458050694493726951231241096695626477586428880220528001269746547018741237131741255022371957489462380305100634600499204435763201371188769446054925748151987175656677342779043435047048130599123081581036362712208692748034620245590448762406543804069935873123161582756799517226666835316588896306926659321054276507714414876684738121421124177324568084533020088172040422767194971217814466953837590498718from number import *R.<x> = Zmod(n)[]
f = x^2-c
r8 = [i[0] for i in f.roots()]
r4,r2,r = [],[],[]for rr8 in r8:f = x^2 - rr8r4 += [i[0] for i in f.roots()]for rr4 in r4:f = x^2 - rr4r2 += [i[0] for i in f.roots()]for rr2 in r2:f = x^2 - rr2r += [i[0] for i in f.roots()]for m in r:print(l2b(m))
得到
flag是crypto{m0dul4r_squ4r3_r00t}
Cryptohack刷题记录(四) Mathematics部分 Brainteasers Part 1 writeup相关推荐
- Cryptohack刷题记录(二) Mathematics部分 Modular Math WriteUp
文章目录 MATHEMETICS MODULAR MATH 1. Quadratic Residues 2. Legendre Symbol 3. Modular Square Root 4. Chi ...
- Cryptohack刷题记录(一) General部分 WP
cryptohack,很不错的一个密码学习平台. 很适合没有基础的beginner系统进行学习 文章目录 注册平台账号 General Encoding 第一题 第二题 第三题 第四题 第五题 XOR ...
- BUU刷题记录(四)
以下几题的ciscn是我先抽出来做的,因为不久就是ciscn,所以看看之前的题目,先不按顺序 十七.ciscn_2019_n_3 照例checksec一下 开启了nx和canary,relro只开启部 ...
- CSP-S集训刷题记录
$ CSP.S $ 集训刷题记录: $ By~wcwcwch $ 一.字符串专题: 1. [模板]$ manacher $ 算法 模型: 求出字符串 $ S $ 中所有回文串的位置及长度. $ sol ...
- $2019$ 暑期刷题记录 $2$(基本算法专题)
$ 2019 $ 暑期刷题记录 $ 2 $ (基本算法专题) $ by~~wch $ $ BZOJ~1958~Strange~Towers~of~Hanoi $ (动态规划,递推) 题目大意: 求有 ...
- Codeforces 刷题记录(已停更)
Codeforces 每日刷题记录 (已停更) 打'+'是一些有启发意义的题目,部分附上一句话题解,每日更新3题,大部分题目较水. Day ID Problem Tutorial Note 1 1 + ...
- BZOJ刷题记录---提高组难度
BZOJ刷题记录---提高组难度 总目录详见https://blog.csdn.net/mrcrack/article/details/90228694 序号 题号 算法 思想难度 实现难度 总难度 ...
- 算法笔记CodeUp第一至第六章刷题记录
文章目录 <算法笔记>2.2小节--C/C++快速入门->顺序结构 1.例题1-1-1 按要求输出信息(1) 2.例题1-1-2 按要求输出信息(2) 3.例题1-2-1 求两个整数 ...
- 蓝桥杯官网刷题记录python
蓝桥杯官网刷题记录python 由于很多题都会在2020.2021.2022年省赛出现,有的在前面文章里做过的这里就不会再说了 一.空间 小蓝准备用 256MB 的内存空间开一个数组,数组的每个元素都 ...
最新文章
- 父子表关联在窗体中的绑定显示和浏览
- python画直方图代码-python plotly画柱状图代码实例
- numpy中where函数的用法
- Vue-CLI@4——html-webpack-plugin默认配置的获取与修改
- OpenCV图像剪切的扩展和高级用法:任意裁剪,边界扩充
- python奖励多少钱_关于python的问题,好的高奖励!
- 关于Jquery EasyUI中的DataGrid服务器端分页随记
- 如何通过父类引用“调用”子类所独有的方法
- 建模助手 —『 CAD图层管理 』Revit视图干净清爽
- ae合成设置快捷键_解决AE提示错误预览需要2个或多个帧才能播放问题
- 2022年2月沪牌拍牌出价策略
- Kernel panic - not syncing: Attempted to kill init! exitcode=0x00000004
- 大厂是如何用DevCloud流水线实现自动化部署Web应用的?
- C语言变量的存储方式和生存期
- 我国有较大的AI大模型应用市场,在应用领域具有优势
- influxDB自定义查询时区
- 520探讨一下如何给geek男友选礼物?(超实用)
- ADB将外置TF储存卡融合本机ROM(内部储存)
- ISP算法介绍--------super Good
- 隐藏安卓平板状态栏,还你全面屏体验