BUUCTF 每日打卡 2021-4-2

引言

啊,假期就要开始了,好耶!
明天还有虎符CTF要打(TTK,一直摸TTK)

信息化时代的步伐

打开附件,只见一串数字:”606046152623600817831216121621196386“
我直接“???”
再看题目描述:
在这里插入图片描述
还是摸不着头脑
只好搜题解
说是中文电码,又是没见过的密码[捂脸]
“也许中国可以早早进入信息化时代,但是被清政府拒绝了”:
自摩尔斯电码在1835年发明后,一直只能用来传送英语或以拉丁字母拼写的文字。1873年,法国驻华人员威基杰(S·A·Viguer)参照《康熙字典》的部首排列方法,挑选了常用汉字6800多个,编成了第一部汉字电码本《电报新书》。后由任上海电报局首任总办的郑观应将其改编成为《中国电报新编》。(摘自wiki)
flag 为:flag{计算机要从娃娃抓起}
这句话是1984年邓小平同志说的:数十年后一位伟人说的话
中文电码加密解密:http://code.mcdvisa.com/

RSA1

dp dq 泄露的题没做过(别问,问就是看wp)
在这里插入图片描述
当然,剽窃别人的答案是可耻的,我们还要“剽窃”别人的知识(嘿嘿嘿)
参考博客:
RSA之拒绝套路(2)

这篇博客讲得很详细,但仍有地方可以细化和纠错
作为一个数理基础不扎实的数院学生,花了老半天才看明白
下面,让我来逐步推导(也当练习 L a t e x Latex Latex了):
首先,什么是 d p dp dp d q dq dq
d p ≡ d   m o d   ( p − 1 ) d q ≡ d   m o d   ( q − 1 ) dp \equiv d\space mod\space (p-1)\\dq \equiv d\space mod\space (q-1) dpd mod (p1)dqd mod (q1)
然后,由 RSA 加密算法可得:
n = p ∗ q c ≡ m e   m o d   n m ≡ c d   m o d   n n = p*q\\c \equiv m^{e}\space mod\space n\\m \equiv c^{d}\space mod\space n n=pqcme mod nmcd mod n
因此,要求出密文 m m m ,我们必须求出 c d c^{d} cd
m ≡ c d   m o d   n m \equiv c^{d}\space mod\space n mcd mod n 可得 ∃   k 1 ∈ Z ,   s . t . \exists\space k_{1} \in\mathbb{Z}, \space s.t.  k1Z, s.t.
m = c d + k 1 ∗ n = c d + k 1 ∗ p ∗ q m=c^{d}+k_{1}*n=c^{d}+k_{1}*p*q m=cd+k1n=cd+k1pq
再对等式两边分别模 p , q p, q p,q ,含 p , q p, q p,q 的项在模 p , q p, q p,q 时为 0 0 0
{ m 1 ≡ c d   m o d   p ⋯ ⋯ ( 1 ) m 2 ≡ c d   m o d   q ⋯ ⋯ ( 2 ) \begin{cases} m_{1} \equiv c^{d}\space mod\space p\cdots\cdots (1)\\m_{2} \equiv c^{d}\space mod\space q \cdots\cdots (2)\end{cases} {m1cd mod p(1)m2cd mod q(2)
(原文此处标注错误)
( 1 ) (1) (1) 式可得 ∃   k 2 ∈ Z ,   s . t . \exists\space k_{2} \in\mathbb{Z}, \space s.t.  k2Z, s.t.
c d = k 2 ∗ p + m 1 c^{d}=k_{2}*p+m_1 cd=k2p+m1
代入 ( 2 ) (2) (2) 式可得
m 2 ≡ ( m 1 + k 2 ∗ p )   m o d   q m_{2} \equiv (m_{1}+k_{2}*p)\space mod\space q m2(m1+k2p) mod q
可得 ∃   k 3 ∈ Z ,   s . t . \exists\space k_{3} \in\mathbb{Z}, \space s.t.  k3Z, s.t.
m 2 = m 1 + k 2 ∗ p + k 3 ∗ q m_{2}=m_{1}+k_{2}*p+k_{3}*q m2=m1+k2p+k3q
移项,两边模 q q q 可得
( m 2 − m 1 ) ≡ k 2 ∗ p   m o d   q (m_{2}-m{1})\equiv k_{2}*p\space mod\space q (m2m1)k2p mod q
由于
g c d ( p , q ) = 1 gcd(p, q)=1 gcd(p,q)=1
由裴蜀定理, ∃   u , v ∈ Z ,   s . t . \exists\space u,v \in\mathbb{Z}, \space s.t.  u,vZ, s.t.
u ∗ p + v ∗ q = 1 u*p+v*q=1 up+vq=1
两边模 q q q
u ∗ p ≡ 1   m o d   q u*p\equiv 1\space mod \space q up1 mod q
故可以求p的逆元,且上式中的 u u u 即为 p p p 的逆元,即 p − 1 ( m o d   q ) p^{-1}(mod\space q) p1(mod q) ,得到
( m 2 − m 1 ) ∗ p − 1 ≡ k 2   m o d   q (m_{2}-m_{1})*p^{-1}\equiv k_{2}\space mod\space q (m2m1)p1k2 mod q
将以下三式
k 2 ≡ ( m 2 − m 1 ) ∗ p − 1   m o d   q c d = k 2 ∗ p + m 1 m ≡ c d   m o d   n k_{2}\equiv (m_{2}-m_{1})*p^{-1}\space mod\space q\\c^{d}=k_{2}*p+m_1\\m \equiv c^{d}\space mod\space n k2(m2m1)p1 mod qcd=k2p+m1mcd mod n
合并可得
m ≡ ( ( ( m 2 − m 1 ) ∗ p − 1   m o d   q ) ∗ p + m 1 )   m o d   n m \equiv (((m_{2}-m_{1})*p^{-1}\space mod\space q)*p+m_1)\space mod\space n m(((m2m1)p1 mod q)p+m1) mod n
最后求 m 1 , m 2 m_{1},m_{2} m1,m2
因为有
{ d ≡ d p   m o d   ( p − 1 ) d ≡ d q   m o d   ( q − 1 ) \begin{cases} d \equiv dp\space mod\space (p-1)\\d \equiv dq\space mod\space (q-1) \end{cases} {ddp mod (p1)ddq mod (q1)

{ m 1 ≡ c d   m o d   p m 2 ≡ c d   m o d   q \begin{cases} m_{1} \equiv c^{d}\space mod\space p\\m_{2} \equiv c^{d}\space mod\space q \end{cases} {m1cd mod pm2cd mod q
代入得
{ m 1 ≡ c d p   m o d   ( p − 1 )   m o d   p m 2 ≡ c d q   m o d   ( q − 1 )   m o d   q \begin{cases} m_{1} \equiv c^{dp\space mod\space (p-1)}\space mod\space p\\m_{2} \equiv c^{dq\space mod\space (q-1) }\space mod\space q \end{cases} {m1cdp mod (p1) mod pm2cdq mod (q1) mod q
d p dp dp 为例,由 d ≡ d p   m o d   ( p − 1 ) d \equiv dp\space mod\space (p-1) ddp mod (p1) 可得 ∃   k ∈ Z ,   s . t . \exists\space k \in\mathbb{Z}, \space s.t.  kZ, s.t.
d = d p + k ∗ ( p − 1 ) d = dp+k*(p-1) d=dp+k(p1)
代入得
m 1 ≡ c d p + k ∗ ( p − 1 )   m o d   p ≡ c d p ∗ c k ∗ ( p − 1 )   m o d   p m_{1} \equiv c^{dp+k*(p-1)} \space mod \space p\equiv c^{dp}*c^{k*(p-1)} \space mod \space p m1cdp+k(p1) mod pcdpck(p1) mod p
由费马小定理,因为 p p p 是素数,且 g c e ( p , c ) = 1 gce(p, c) = 1 gce(p,c)=1(由于 p p p 是大素数,而 c c c 是偶数),则
c ( p − 1 ) ≡ 1   m o d   p c^{(p-1)} \equiv 1\space mod\space p c(p1)1 mod p
∃   k 4 ∈ Z ,   s . t . \exists\space k_{4} \in\mathbb{Z}, \space s.t.  k4Z, s.t.
c k ∗ ( p − 1 ) = ( c p − 1 ) k = ( 1 + k 4 ∗ p ) k c^{k*(p-1)} = (c^{p-1})^{k} = (1+k_{4}*p)^{k} ck(p1)=(cp1)k=(1+k4p)k
对右式二项式展开再模 p p p 可得
c k ∗ ( p − 1 ) ≡ 1   m o d   p c^{k*(p-1)} \equiv 1 \space mod \space p ck(p1)1 mod p

m 1 ≡ c d p   m o d   p m_{1} \equiv c^{dp} \space mod \space p m1cdp mod p
同理可得
m 2 ≡ c d q   m o d   q m_{2} \equiv c^{dq} \space mod \space q m2cdq mod q
最终得方程组
{ m 1 ≡ c d p   m o d   p m 2 ≡ c d q   m o d   q m ≡ ( ( ( m 2 − m 1 ) ∗ p − 1   m o d   q ) ∗ p + m 1 )   m o d   n \begin{cases} m_{1} \equiv c^{dp} \space mod \space p\\m_{2} \equiv c^{dq} \space mod \space q\\m \equiv (((m_{2}-m_{1})*p^{-1}\space mod\space q)*p+m_1)\space mod\space n \end{cases} m1cdp mod pm2cdq mod qm(((m2m1)p1 mod q)p+m1) mod n
代码实现如下:

from Crypto.Util.number import *
import libnum

p = 8637633767257008567099653486541091171320491509433615447539162437911244175885667806398411790524083553445158113502227745206205327690939504032994699902053229
q = 12640674973996472769176047937170883420927050821480010581593137135372473880595613737337630629752577346147039284030082593490776630572584959954205336880228469
dp = 6500795702216834621109042351193261530650043841056252930930949663358625016881832840728066026150264693076109354874099841380454881716097778307268116910582929
dq = 783472263673553449019532580386470672380574033551303889137911760438881683674556098098256795673512201963002175438762767516968043599582527539160811120550041
c = 24722305403887382073567316467649080662631552905960229399079107995602154418176056335800638887527614164073530437657085079676157350205351945222989351316076486573599576041978339872265925062764318536089007310270278526159678937431903862892400747915525118983959970607934142974736675784325993445942031372107342103852

def decrypt(dp, dq, p, q, c):
    n = p*q
    InvQ = inverse(p, q)
    m1 = pow(c, dp, p)
    m2 = pow(c, dq, q)
    m = ((((m2 - m1)*InvQ) % p) * p + m1) % n
    print(libnum.n2s(m))

decrypt(dp, dq, p, q, c)

结语

终于肝完了,已经燃尽了(躺)
明天还要打比赛
希望能继续坚持

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值