NSSCTF Round#11 Basic ez_signin

题目:

from Crypto.Util.number import *
from secret import flag

p = getPrime(512)
q = getPrime(512)
assert p > q
n = p*q
e = 65536
m = bytes_to_long(flag)
num1 = (pow(p,e,n)-pow(q,e,n)) % n
num2 = pow(p-q,e,n)
c = pow(m,e,n)

print("num1=",num1)
print("num2=",num2)
print("n=",n)
print("c=",c)

代码如下:

from Crypto.Util.number import *
import gmpy2

num1= 134186458247304184975418956047750205959249518467116558944535042073046353646812210914711656218265319503240074967140027248278994209294869476247136854741631971975560846483033205230015783696055443897579440474585892990793595602095853960468928457703619205343030230201261058516219352855127626321847429189498666288452
num2= 142252615203395148320392930915384149783801592719030740337592034613073131106036364733480644482188684184951026866672011061092572389846929838149296357261088256882232316029199097203257003822750826537629358422813658558008420810100860520289261141533787464661186681371090873356089237613080052677646446751824502044253
n= 154128165952806886790805410291540694477027958542517309121222164274741570806324940112942356615458298064007096476638232940977238598879453357856259085001745763666030177657087772721079761302637352680091939676709372354103177660093164629417313468356185431895723026835950366030712541994019375251534778666996491342313
c= 9061020000447780498751583220055526057707259079063266050917693522289697419950637286020502996753375864826169562714946009146452528404466989211057548905704856329650955828939737304126685040898740775635547039660982064419976700425595503919207903099686497044429265908046033565745195837408532764433870408185128447965

p = GCD(num1+num2,n)
q = n//p

x0=gmpy2.invert(p,q)
x1=gmpy2.invert(q,p)
cs = [c]
for i in range(16):
    ps = []
    for c2 in cs:
        r = pow(c2, (p + 1) // 4, p)
        s = pow(c2, (q + 1) // 4, q)

        x = (r * x1 * q + s * x0 * p) % n
        y = (r * x1 * q - s * x0 * p) % n
        if x not in ps:
            ps.append(x)
        if n - x not in ps:
            ps.append(n - x)
        if y not in ps:
            ps.append(y)
        if n - y not in ps:
            ps.append(n - y)
    cs = ps

for m in ps:
    flag = long_to_bytes(m)
    if b"nssctf" in flag:
        print(flag)
        break

相关推荐

  1. <span style='color:red;'>12</span>.<span style='color:red;'>11</span>

    12.11

    2024-03-23 04:36:02      61 阅读
  2. <span style='color:red;'>12</span>.<span style='color:red;'>11</span>

    12.11

    2024-03-23 04:36:02      59 阅读
  3. Qt12.11

    2024-03-23 04:36:02       65 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-23 04:36:02       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-23 04:36:02       106 阅读
  3. 在Django里面运行非项目文件

    2024-03-23 04:36:02       87 阅读
  4. Python语言-面向对象

    2024-03-23 04:36:02       96 阅读

热门阅读

  1. mysql regex的介绍和用法

    2024-03-23 04:36:02       42 阅读
  2. 统计咨询|久菜盒子工作室可实现需求

    2024-03-23 04:36:02       42 阅读
  3. 赋能企业发展:亚信安慧AntDB的多维度支持

    2024-03-23 04:36:02       47 阅读
  4. vue3 + ts,如何获取路由传递的参数

    2024-03-23 04:36:02       43 阅读
  5. 制冷系统简单计算

    2024-03-23 04:36:02       38 阅读
  6. 推荐系统|冷启动问题解决方法

    2024-03-23 04:36:02       45 阅读
  7. Event Command Set (64)-Composite Command (100)

    2024-03-23 04:36:02       42 阅读