首页 > 其他分享 >cryptohack wp day(4)

cryptohack wp day(4)

时间:2023-05-07 11:12:07浏览次数:44  
标签:剩余 cryptohack 二次 整数 素数 逆元 wp day mod

接上题

第五题(Modular Inverting)


在模运算中,如果我们要解决形如a * x ≡ b mod m的方程,其中a,b,m是已知整数,x是未知整数,我们可以使用扩展欧几里得算法来找到x的值。但是,如果m是一个质数,我们可以使用费马小定理来计算a的逆元,即a关于模m的倒数。

具体来说,如果p是一个素数,a是p的倍数之外的任意整数,那么a的逆元a^-1就是满足下列等式的整数b:

a * b ≡ 1 mod p

这里,b就是a在模p意义下的逆元。例如,假设我们要求解3在模13意义下的逆元,也就是找到一个整数b满足3 * b ≡ 1 mod 13。根据费马小定理,3^11 ≡ 1 mod 13,因此3的逆元就是3^10,即9。因为3 * 9 ≡ 1 mod 13。

综上所述,如果我们知道一个数a在模p意义下的逆元b,那么我们就可以用a * b ≡ 1 mod p来验证b是不是a的逆元,也可以用a * b对p取模来计算a在模p意义下的倒数。
python代码如下:

def find_inverse(a, p):
    """
    使用费马小定理计算a在模p意义下的逆元。
    """
    if gcd(a, p) != 1:
        raise ValueError("a和p必须互质")
    return pow(a, p-2, p)

def gcd(a, b):
    """
    使用欧几里得算法计算a和b的最大公因数。
    """
    if b == 0:
        return a
    else:
        return gcd(b, a % b)
print(find_inverse(3,13))

第六题(Quadratic Residues)

 在模块化算术中,模平方剩余 (QR) 是一个整数,它与完全平方模某个整数模的整数全等。更正式地说,如果存在整数 x,则整数 a 是对整数 p 取模的二次留数,使得:

x^2 ≡ a (mod p)

如果这样的整数 x 存在,我们说 a 是二次留数模 p 并写成 a ≡ x^2 (mod p)。

如果不存在这样的整数 x,则 a 称为二次无余数模 p。

所有二次留数模 p 的集合用 QR(p) 表示,所有二次模非平方剩余 p 的集合用 QNR(p) 表示。

确定一个整数是二次剩余还是非剩余模给定素数 p 是数论中的一个重要问题,在密码学、编码理论和其他领域有各种应用。二次互易定律提供了一个强大的工具来确定二次留数和非留数模素数,以及计算勒让德符号,勒让德符号是一个相关的数学函数,可用于确定二次留数和非留数对任何奇数取模。
题目给了p = 29 , i n ts = [ 14 , 6 , 11 ],找到三个书中的QR的那一个,解出这个数的模平方根,小的一个根即flag.
上代码:

def quad_residue(x, p):
    """
    检查 x 是否是有限域 F_p 中的二次留数。
如果 x 是二次剩余,则返回 True,否则返回 False。
    """
    for a in range(1, p):
        if pow(a, 2, p) == x:
            return True
    return False

def solve_quad_residue(x, p):
    """
    在有限域 F_p 中求解方程 a^2 = x,其中 p 是质数模数。
返回两个解的元组(如果存在),如果 x 不是二次残差则返回 None。
    """
    if not quad_residue(x, p):
        return None
    solutions = []
    for a in range(1, p):
        if pow(a, 2, p) == x:
            solutions.append(a)
            solutions.append(p - a) # 添加负解
            break
    return tuple(solutions)


p = 29
ints = [14, 6, 11]
for x in ints:
    print(f"x = {x}")
    solutions = solve_quad_residue(x, p)
    if solutions:
        print(f"Solutions: {solutions}")
    else:
        print("Not a quadratic residue")

第七题(Legendre Symbol)

p = 101524035174539890485408575671085261788758965189060164484385690801466167356667036677932998889725476582421738788500738738503134356158197247473850273565349249573867251280253564698939768700489401960767007716413932851838937641880157263936985954881657889497583485535527613578457628399173971810541670838543309159139
ints = [25081841204695904475894082974192007718642931811040324543182130088804239047149283334700530600468528298920930150221871666297194395061462592781551275161695411167049544771049769000895119729307495913024360169904315078028798025169985966732789207320203861858234048872508633514498384390497048416012928086480326832803, 45471765180330439060504647480621449634904192839383897212809808339619841633826534856109999027962620381874878086991125854247108359699799913776917227058286090426484548349388138935504299609200377899052716663351188664096302672712078508601311725863678223874157861163196340391008634419348573975841578359355931590555, 17364140182001694956465593533200623738590196990236340894554145562517924989208719245429557645254953527658049246737589538280332010533027062477684237933221198639948938784244510469138826808187365678322547992099715229218615475923754896960363138890331502811292427146595752813297603265829581292183917027983351121325, 14388109104985808487337749876058284426747816961971581447380608277949200244660381570568531129775053684256071819837294436069133592772543582735985855506250660938574234958754211349215293281645205354069970790155237033436065434572020652955666855773232074749487007626050323967496732359278657193580493324467258802863, 4379499308310772821004090447650785095356643590411706358119239166662089428685562719233435615196994728767593223519226235062647670077854687031681041462632566890129595506430188602238753450337691441293042716909901692570971955078924699306873191983953501093343423248482960643055943413031768521782634679536276233318, 85256449776780591202928235662805033201684571648990042997557084658000067050672130152734911919581661523957075992761662315262685030115255938352540032297113615687815976039390537716707854569980516690246592112936796917504034711418465442893323439490171095447109457355598873230115172636184525449905022174536414781771, 50576597458517451578431293746926099486388286246142012476814190030935689430726042810458344828563913001012415702876199708216875020997112089693759638454900092580746638631062117961876611545851157613835724635005253792316142379239047654392970415343694657580353333217547079551304961116837545648785312490665576832987, 96868738830341112368094632337476840272563704408573054404213766500407517251810212494515862176356916912627172280446141202661640191237336568731069327906100896178776245311689857997012187599140875912026589672629935267844696976980890380730867520071059572350667913710344648377601017758188404474812654737363275994871, 4881261656846638800623549662943393234361061827128610120046315649707078244180313661063004390750821317096754282796876479695558644108492317407662131441224257537276274962372021273583478509416358764706098471849536036184924640593888902859441388472856822541452041181244337124767666161645827145408781917658423571721, 18237936726367556664171427575475596460727369368246286138804284742124256700367133250078608537129877968287885457417957868580553371999414227484737603688992620953200143688061024092623556471053006464123205133894607923801371986027458274343737860395496260538663183193877539815179246700525865152165600985105257601565]

考察二次剩余定理
二次剩余定理表述如下:如果p和q是两个不同的奇素数,则二次剩余x mod p可以通过奇偶性以及符号确定它是否是二次剩余mod q,具体来说:

如果p和q都是形如4k+1的素数,或者都是形如4k+3的素数,则x mod p是二次剩余mod q当且仅当q mod p是二次剩余mod p。
如果p是形如4k+1的素数,q是形如4k+3的素数,则x mod p是二次剩余mod q当且仅当q mod p是二次非剩余mod p。
如果p是形如4k+3的素数,q是形如4k+1的素数,则x mod p是二次剩余mod q当且仅当q mod p是二次剩余mod p。
二次剩余
x^2≡n(mod p)
对于这个方程,求出满足的x.

想要更好了解,推荐下:[(https://blog.csdn.net/weixin_44203780/article/details/104634637)]
再看这道题,直接上代码:

p = 101524035174539890485408575671085261788758965189060164484385690801466167356667036677932998889725476582421738788500738738503134356158197247473850273565349249573867251280253564698939768700489401960767007716413932851838937641880157263936985954881657889497583485535527613578457628399173971810541670838543309159139
ints = [25081841204695904475894082974192007718642931811040324543182130088804239047149283334700530600468528298920930150221871666297194395061462592781551275161695411167049544771049769000895119729307495913024360169904315078028798025169985966732789207320203861858234048872508633514498384390497048416012928086480326832803, 45471765180330439060504647480621449634904192839383897212809808339619841633826534856109999027962620381874878086991125854247108359699799913776917227058286090426484548349388138935504299609200377899052716663351188664096302672712078508601311725863678223874157861163196340391008634419348573975841578359355931590555, 17364140182001694956465593533200623738590196990236340894554145562517924989208719245429557645254953527658049246737589538280332010533027062477684237933221198639948938784244510469138826808187365678322547992099715229218615475923754896960363138890331502811292427146595752813297603265829581292183917027983351121325, 14388109104985808487337749876058284426747816961971581447380608277949200244660381570568531129775053684256071819837294436069133592772543582735985855506250660938574234958754211349215293281645205354069970790155237033436065434572020652955666855773232074749487007626050323967496732359278657193580493324467258802863, 4379499308310772821004090447650785095356643590411706358119239166662089428685562719233435615196994728767593223519226235062647670077854687031681041462632566890129595506430188602238753450337691441293042716909901692570971955078924699306873191983953501093343423248482960643055943413031768521782634679536276233318, 85256449776780591202928235662805033201684571648990042997557084658000067050672130152734911919581661523957075992761662315262685030115255938352540032297113615687815976039390537716707854569980516690246592112936796917504034711418465442893323439490171095447109457355598873230115172636184525449905022174536414781771, 50576597458517451578431293746926099486388286246142012476814190030935689430726042810458344828563913001012415702876199708216875020997112089693759638454900092580746638631062117961876611545851157613835724635005253792316142379239047654392970415343694657580353333217547079551304961116837545648785312490665576832987, 96868738830341112368094632337476840272563704408573054404213766500407517251810212494515862176356916912627172280446141202661640191237336568731069327906100896178776245311689857997012187599140875912026589672629935267844696976980890380730867520071059572350667913710344648377601017758188404474812654737363275994871, 4881261656846638800623549662943393234361061827128610120046315649707078244180313661063004390750821317096754282796876479695558644108492317407662131441224257537276274962372021273583478509416358764706098471849536036184924640593888902859441388472856822541452041181244337124767666161645827145408781917658423571721, 18237936726367556664171427575475596460727369368246286138804284742124256700367133250078608537129877968287885457417957868580553371999414227484737603688992620953200143688061024092623556471053006464123205133894607923801371986027458274343737860395496260538663183193877539815179246700525865152165600985105257601565]

solution = []
for a in ints:
    result = pow(a,(p-1)//2,p)
    if result == 1:
        solution.append(ints.index(a))
        print(solution)
        flag = pow(a,(p+1)//4,p)
        print("flag=",flag)

标签:剩余,cryptohack,二次,整数,素数,逆元,wp,day,mod
From: https://www.cnblogs.com/Cryglz/p/17378771.html

相关文章

  • Python进阶:Day1什么django框架,怎么使用,用在哪里?
    前言:django框架大家好,我是辣条好久没有更新高能作品了,从今天开始我不定期更新系列作品,可能会偏向于中高级,没有基础的同学们可以看我往期的基础博文哦~亦或者直接通过文末底下名片直接找到辣条~废话不多说我们直接开始Django是一个开放源代码的Web应用框架,由Python写成。采用了MTV......
  • Day16
      3.代码示例#include<iostream>usingnamespacestd;intmain(){inti,n,j,a[5],s;for(i=95860;;i++){for(j=i,n=0;j>0;n++){a[n]=j%10;j=j/10;}if(a[0]==a[4]&&a[1]==a[3]){......
  • day66(2023.5.6)
    1.DOM操作(一) 这是js添加class 2.DOM操作(二) test和html的区别:testa之后会变成字符串,而htmla会变成超链接 运行结果: 3.DOM操作(三) 运行结果: 运行结果: 运行结果: 运行结果: 4.DOM操作(四) 先用js实现......
  • Day_07
    用户管理中心django写离线脚本非web运行时的一个或者几个py文件探讨业务(表结构)价格策略用户和价格策略的关联关系基于腾讯的对象存储COS存储数据项目参与者创建表结构models.pyclassUserInfo(models.Model):username=models.CharField(verbose_na......
  • WPS基础使用指南
    WPS是一款非常常用的办公软件,包含了WPS文字、WPS表格、WPS演示三个模块。以下是WPS基础使用知识:1.启动WPS在电脑桌面找到WPS的图标,双击打开即可。或者在开始菜单中搜索WPS,点击打开。也可以直接双击文档、表格、演示等格式的文件,WPS会自动打开对应的模块。2.WPS文字的快捷键快捷键......
  • DAY3
    ikuai初始密码admin/admin默认没有开启dhcp自动获取ip,需要手动配置IPikuai配置两块网卡外网使用nat模式内网使用仅主机模式win系统使用仅主机模式镜像安装后应设置IP地址与本机IP差别不大最后一位改变即可q即可退出程序进入之后即可重新设置账户密码(不可太过简单)......
  • WEB|[CISCN2019 华北赛区 Day1 Web5]CyberPunk
    看到有登录框想到可能存在注入,但是对每个页面都测试了并没有结果,看有提交订单页面和查询订单页面猜测可能会有二次注入,但是没有源码不好测试,然后查看网页源码也没发现什么看了下别人的wp,源码最后有提示<!--?file=?-->,可能存在文件包含,这个确实没有想到</body></html><!--?fi......
  • WEB|[CISCN2019 华北赛区 Day1 Web2]ikun
    访问页面注册帐户登录,提示要买到lv6,翻了好几页发现没得lv6的商品,写个脚本跑看看lv6商品在第几页importrequestsi=0whileTrue:i+=1url='http://40902fee-e0e5-4d7a-8b38-b16b5f97549b.node4.buuoj.cn:81/shop?page=%d'%(i)print(url)res=requ......
  • WEB|[CISCN2019 华北赛区 Day1 Web1]Dropbox
    注册帐号登录存在文件上传点,抓包上传文件,修改Content-Type后可以上传代码文件,但是后缀会变为图片后缀上传文件后有文件下载功能抓包发现filename直接曝露在内容中,试试下载其他文件,发现存在任意文件下载漏洞将已知文件都下载下来文件源码login.php<?phpsession_start......
  • Web|[SWPUCTF 2018]SimplePHP
    访问是一个文件上传页面,点击查看文件页面可以发现特殊的链接,应该存在文件包含http://dfef288e-1b73-48e0-9458-a4e733c40c38.node4.buuoj.cn:81/file.php?file=查看源码发现一些文件,页面内容提示flag在f1ag.php中index.phpfile.phpupload_file.phpf1ag.php直接包含f1a......