首页 > 其他分享 >羊城杯-Cry部分

羊城杯-Cry部分

时间:2024-08-31 22:14:07浏览次数:10  
标签:int Cry bytes long 羊城 print import 部分 order

本次密码还算友好

RSAloss

思路:m mod n情况,已知高位为b'DASCTF',低位为b'}',中间未知,约为200bit。造格爆破未知部分高位,最终在爆破三字节情况下格求解得到准确结果。

import itertools
from Crypto.Util.number import *
import re
from gmpy2 import gcd

p = 898278915648707936019913202333
q = 814090608763917394723955024893
e = 65537
m_mod = bytes_to_long(b'X\xee\x1ey\x88\x01dX\xf6i\x91\x80h\xf4\x1f!\xa7"\x0c\x9a\x06\xc8\x06\x81\x15')
n = p * q

string = ''
for i in range(33,127):
    string += chr(i)

for i in range(208,512,8):
    print(i)
    S = []
    for i0 in itertools.product(string, repeat=(i-200)//8):
        A = ''
        for i1 in i0:
            A += i1
        S.append(A)
        # print(S)
    for ii in S:
        K0 = bytes_to_long(b'DASCTF{'+ii.encode())*2**208
        K1 = bytes_to_long(b'}')
        KK = (K0+K1-m_mod)
        M = matrix(ZZ,[[n,0],[KK,2**200]])
        mm = M.LLL()
        m = long_to_bytes(abs(int(mm[1][0]))*inverse(2**8,n)%n)
        if re.fullmatch(b'[0-9a-zA-Z_{}]+', m):
            print(m)

TH_curve

问GPT是Hessian curves,maple有过转换推导:

from Crypto.Util.number import *

# def re(x1,y1,p,d2):
#     u = (12*(d2**3-1)*inverse(d2+x1+y1,p)-9*d2**2)%p
#     v= 36*(y1-x1)*(d2**3-1)*inverse(d2+x1+y1,p)%p
#     return u,v

p = 10297529403524403127640670200603184608844065065952536889
a = 2
G = (8879931045098533901543131944615620692971716807984752065, 4106024239449946134453673742202491320614591684229547464)
Q = (6784278627340957151283066249316785477882888190582875173, 6078603759966354224428976716568980670702790051879661797)

d = inverse(G[1]*G[0],p)*(1+a*G[0]**3+G[1]**3) % p
c = 1

F = GF(p)
x, y, z = QQ["x,y,z"].gens()
eq = a * x ^ 3 + y ^ 3 + c * z ^ 3 - d * x * y * z
phi = EllipticCurve_from_cubic(eq)
E = phi.codomain().change_ring(GF(p))

fx, fy, fz = map(lambda f: f.change_ring(F), phi.defining_polynomials())
phiP = lambda x, y, z=1: E(fx(x, y, z) / fz(x, y, z), fy(x, y, z) / fz(x, y, z))
EP = phiP(*G)
EQ = phiP(*Q)
factors, exponents = zip(*factor(E.order()))
primes = [factors[i] ^ exponents[i] for i in range(len(factors))][:-2]
# print(primes)
primes=[ 9, 49, 11, 19, 29, 1361, 6421, 3376343, 1815576031,295369272787]

dlogs = []
for fac in primes:
    t = int(int(EP.order()) // int(fac))
    # dlog = discrete_log(t*EQ,t*EP,operation="+")
    dlog=(t*EP).discrete_log(t*EQ)
    dlogs += [dlog]
    print("factor: "+str(fac)+", Discrete Log: "+str(dlog)) #calculates discrete logarithm for each prime order

x = crt(dlogs,primes)
print(x)

od = EP.order()  # the generator doesn't have full order
print(
    [
        flag
        for i in range(E.order() // od)
        if (flag := long_to_bytes(int(x + od * i))).isascii()
    ]
)

babycurve

b,c居然可以爆破出来,难评。。。后面就是ph问题,求出ecdlp的x值即可:

from Crypto.Cipher import AES
from Crypto.Util.number import *
import hashlib

b = 98
c = 35
p = 770311352827455849356512448287
E = EllipticCurve(GF(p), [-c, b])
G = E(584273268656071313022845392380, 105970580903682721429154563816)
P = E(401055814681171318348566474726, 293186309252428491012795616690)
pfactor = [i for i,_ in E.order().factor()][:-1]
print(pfactor)
dislog = []
for i in pfactor:
    t = int(E.order())//int(i)
    dislog.append(discrete_log(P*t,t*G,operation = '+'))
    # dislog.append((t * G).discrete_log(t * A))
    print(f'pfactor {i} have done')
k = crt(dislog,pfactor)


# k = 2951856998192356
key = hashlib.sha256(str(k).encode()).digest()[:16]
iv = long_to_bytes(0xbae1b42f174443d009c8d3a1576f07d6)
cipher = AES.new(key, AES.MODE_CBC, iv)
flag = cipher.decrypt(long_to_bytes(0xff34da7a65854ed75342fd4ad178bf577bd622df9850a24fd63e1da557b4b8a4))
print(flag)

TheoremPlus

我们直接输入一个小值给原题目函数先看看,发现是统计素数个数-2,欧式筛一分钟左右即可。(只不过也看到有师傅用sagemath自带的prime_range函数,学到了,

标签:int,Cry,bytes,long,羊城,print,import,部分,order
From: https://www.cnblogs.com/JustGo12/p/18390846

相关文章

  • STM32学习笔记,SPI通信协议(理论部分)
    SPI通信和I2C通信差不多,两个协议的目的都一样,都是实现主控芯片和各种外挂芯片之间的数据交流;有了数据交流的能力,主控芯片就可以挂载并操纵各式各样的外部芯片,来实现一个功能更强大的控制系统;课程安排与I2C通信一样,先学习SPI协议的软硬件规定;先用软件模拟的SPI,实现读写W25Q64......
  • leetcode刷题day4|链表部分(24. 两两交换链表中的节点 、19.删除链表的倒数第N个节点、
    前言:链表练习的第二天,对链表的理解加深了24.两两交换链表中的节点这个题一开始的思路是用cur和next两个指针来做,但是绕来绕去绕迷糊了,最后超时了。把错误的代码放在下面警醒大家:主要问题出现在这两行代码,next.next发生了更改。next.next=next.next.next;next.next.nex......
  • leetcode刷题day3|链表部分( 203.移除链表元素、707.设计链表、206.反转链表)
    前言:链表部分之前刷过一些题,掌握的还可以,希望可以顺利把这部分题刷完。203.移除链表元素思路:自己创建一个头节点,使新的头节点指向旧的头节点。错误尝试:一开始考虑的比较复杂,设置了指针pre,能够想到直接比较cur.next.val和val的值会使代码更加简洁,但也要注意想清楚如果删除......
  • saas收银系统源码(附部分代码)
    随着时代不断发展,很多连锁品牌不断涌现,门店数量也日益增多,但连锁品牌在选收银系统时,如果选择传统的SaaS模式合作,按门店数量、按功能模块收取服务费,门店数量如果多,每年也会是一笔不小的开支,其次连锁品牌的门店增多,门店的日常经营需求也会随之增多,比如需要对接第三方系统,添加一些自己......
  • ansible 命令及其部分模块
    ansible管理:ansible进行远程管理的两个方法:adhoc临时命令。就是在命令行上执行管理命令。playbook剧本。把管理任务用特定格式写到文件中。无论哪种方式,都是通过模块加参数进行管理。adhoc临时命令语法:ansible主机或组列表-m模块-a"参数"#-a是可选的通过ping模块测试到远......
  • CSP-J 2020 初赛试题解析(第一部分:单项选择题(5-10))
    ......
  • 高德地图,只有部分marker显示InfoWindow并可点击
    高德地图,只有部分marker显示InfoWindow并可点击   原因:加了MarkerCluster之后,出现不稳定现象“有部分marker显示InfoWindow并可点击”。      //将所有的标记点添加到markercluster//markercluster    // markerLayer.setMarkers(marker......
  • Istio 基于头部分流
    分离部署istio下面的示例把数据平面和控制平面分开部署。自动生成配置文件可以istioctlprofiledumpempty加上配置文档然后进行修改。生产集群注意配置资源限制。apiVersion:install.istio.io/v1alpha1kind:IstioOperatormetadata:name:control-planespec:prof......
  • JVM的架构,具体阐述一下各个部分的功能?还有.class文件的加载执行过程。
    以下内容由chatgpt生成,仅供个人学习。JVM(JavaVirtualMachine,Java虚拟机)是运行Java程序的抽象计算机。它将编译后的.class文件(字节码)加载、解析、执行,并管理Java程序的内存、线程等资源。JVM的架构可以分为以下几个主要部分:1.JVM架构JVM的架构包括以下几个重要的......
  • CSP-J 2021 初赛试题解析(第三部分:完善程序(2))
    完善程序二完整程序代码#include<iostream>usingnamespacestd;structpoint{intx,y,id;};boolequals(pointa,pointb){returna.x==b.x&&a.y==b.y;}boolcmp(pointa,pointb){returna.x!=b.x?a.x<b.x:a.y<b.y;}......