南邮0xGame 2021 Crypto WriteUps

本文详细介绍了三道网络安全与信息加密技术的题目,包括使用威尔逊定理解决RSA加密问题,通过费马小定理和二项式定理破解加密信息,以及通过分析同余生成器预测数列。每道题目都提供了推导过程和解决方案,展示了如何利用数学原理和编程技巧来解决实际的加密挑战。
摘要由CSDN通过智能技术生成

南邮0xGame Crypto WriteUps

记录几道南邮新生赛的题目学习学习。

#1 Wilson

题目:

from Crypto.Util.number import getPrime, bytes_to_long
from gmpy2 import next_prime
# length of flag is 37
p = getPrime(512)
q = next_prime(p)
f = open('flag.txt', 'rb')
flag = bytes_to_long(f.read())
f.close()
n = p * q
noise = 1
for i in range(1, p):
    noise = (noise * i) % q # (p-1)! mod q
e = 65537
m = noise * flag % n
c = pow(m, e, n)
print(n)
print(c)
# n=100189599139045520692403514463438191919411159406336533264628466489136567106850053961211156503402646767637582308399326881242266939213884415929464845632614082572953261137505406070253764077806987137037034310296845793371123661392496824861923474884525612617707544570336505659782455487338427377348917874318463239257
# c=52162333124576686957153373769942403179822965367913494233622980146825418118797445630968150884296792193181121863149103395864786568453259110222784314675525339496760525297631678262500661476204948790654439464714409499209171376596016201182419029308570372822332848217278055720486674459768995713889509753949399299473

p,q相差不大,直接yafu分解了,noise经过一整个循环后为(p-1)! mod q,阶乘取模的问题想到利用威尔逊定理。

推导过程:
在这里插入图片描述exp:

import gmpy2
from Crypto.Util.number import *
e = 65537
n = 100189599139045520692403514463438191919411159406336533264628466489136567106850053961211156503402646767637582308399326881242266939213884415929464845632614082572953261137505406070253764077806987137037034310296845793371123661392496824861923474884525612617707544570336505659782455487338427377348917874318463239257
c = 52162333124576686957153373769942403179822965367913494233622980146825418118797445630968150884296792193181121863149103395864786568453259110222784314675525339496760525297631678262500661476204948790654439464714409499209171376596016201182419029308570372822332848217278055720486674459768995713889509753949399299473
q = 10009475467727842964944136921466692066364373263024256649726700299397848867019210333658570624176497020220474895288449922932713775955785908704109113057682373
p = 10009475467727842964944136921466692066364373263024256649726700299397848867019210333658570624176497020220474895288449922932713775955785908704109113057682309
phi = (p-1)*(q-1)
d = gmpy2.invert(e,phi)
m = gmpy2.powmod(c,d,n)
mq = -m % q
for i in range(p, q):
    mq = (mq * i) % q
print(long_to_bytes(mq))

#2 Fermat_with_Binomial

题目:

from Crypto.Util.number import *
f = open('flag.txt', 'rb')
m = bytes_to_long(f.read())
f.close()
e = 65537
p = getPrime(1024)
q = getPrime(1024)
n = p * q
c = pow(m, e, n)
hint1 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值