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

cryptohack wp day(5)

时间:2023-05-08 19:12:48浏览次数:43  
标签:moduli 加密 cryptohack pow ff wp print import day

第九题(Chinese Remainder Theorem)


考察中国剩余定理
这个讲的挺详细的[https://www.bilibili.com/video/BV1gf4y1S7LR/]
参考:[(https://www.cnblogs.com/MashiroSky/p/5918158.html)]
我这里就不做过多的赘述了。
然后给出代码:

from functools import reduce
from math import gcd

# 定义同余方程组和模数
eqns = [(2, 5), (3, 11), (5, 17)]
moduli = [5, 11, 17]

# 计算总模数
N = reduce(lambda x, y: x*y, moduli)

# 计算每个模数的逆元
m = [N // m for m in moduli]
mi = [pow(m[i], -1, moduli[i]) for i in range(len(moduli))]

# 计算唯一解
x = sum(a * mi[i] * m[i] for i, (a, _) in enumerate(eqns))

# 输出结果
print("Solution: x = {} (mod {})".format(x % N, N))

第十题(Adrien's Signs)


加密代码如图:

上面的代码实现了一个基本的加密方案,用于加密一个二进制格式的标志(flag)。其中,标志的每一位都被独立地加密。加密过程使用了一个基于模幂运算的公钥算法。

公钥由两个参数组成:一个大素数 p 和一个整数 a,其中 a 是模 p 的一个原根。私钥是指数 e,每一位明文都随机选择一个私钥指数。

为了加密单个二进制位,首先将明文位转换为整数 0 或 1。然后,在 1 到 p-1 之间随机选择一个指数 e。对于该位的密文,计算如下:

如果明文为 1,则密文为 a^e mod p
如果明文为 0,则密文为 -a^e mod p
每个位的密文存储在一个列表中,并作为函数的输出返回。

代码中的 FLAG 变量实际上没有被使用,只是一个占位符,用于加密的标志应该作为参数传递给 encrypt_flag 函数。
给出解密代码:

a = 288260533169915
p = 1007621497415251


exec('c=' + open("D:\\temp\\5.txt").read())
from sympy import discrete_log as dl
from tqdm import *  #应用tqdm库显示过程进度
ff = ''
for i in trange(len(c)):
    cc = c[i]
    try:
        r = dl(p,cc,a)
        ff += '1'
    except:
        r = dl(p,-cc%p,a)
        ff += '0'
print(ff)

import libnum
print(libnum.b2s(ff))

第十一题(Modular Binomials)


题目说要拿到p,q,第一想法时看一下能不能分解,用factordb试着分解了一下,发现竟然可以

成功拿到p,q。
这道题是一道典型的模二项式的题,可以用模算数定理进行简化
具体实现代码如下:

from math import gcd

n = 14905562257842714057932724129575002825405393502650869767115942606408600343380327866258982402447992564988466588305174271674657844352454543958847568190372446723549627752274442789184236490768272313187410077124234699854724907039770193680822495470532218905083459730998003622926152590597710213127952141056029516116785229504645179830037937222022291571738973603920664929150436463632305664687903244972880062028301085749434688159905768052041207513149370212313943117665914802379158613359049957688563885391972151218676545972118494969247440489763431359679770422939441710783575668679693678435669541781490217731619224470152467768073
e1 = 12886657667389660800780796462970504910193928992888518978200029826975978624718627799215564700096007849924866627154987365059524315097631111242449314835868137
e2 = 12110586673991788415780355139635579057920926864887110308343229256046868242179445444897790171351302575188607117081580121488253540215781625598048021161675697
c1 = 14010729418703228234352465883041270611113735889838753433295478495763409056136734155612156934673988344882629541204985909650433819205298939877837314145082403528055884752079219150739849992921393509593620449489882380176216648401057401569934043087087362272303101549800941212057354903559653373299153430753882035233354304783275982332995766778499425529570008008029401325668301144188970480975565215953953985078281395545902102245755862663621187438677596628109967066418993851632543137353041712721919291521767262678140115188735994447949166616101182806820741928292882642234238450207472914232596747755261325098225968268926580993051
c2 = 14386997138637978860748278986945098648507142864584111124202580365103793165811666987664851210230009375267398957979494066880296418013345006977654742303441030008490816239306394492168516278328851513359596253775965916326353050138738183351643338294802012193721879700283088378587949921991198231956871429805847767716137817313612304833733918657887480468724409753522369325138502059408241232155633806496752350562284794715321835226991147547651155287812485862794935695241612676255374480132722940682140395725089329445356434489384831036205387293760789976615210310436732813848937666608611803196199865435145094486231635966885932646519

q1 = pow(c1, e2, n)
q2 = pow(c2, e1, n)

d = pow(5, e1 * e2, n) * q1 - pow(2, e1 * e2, n) * q2

q = gcd(d, n)
p = n // q

assert(p * q == n)
print(p,q)

标签:moduli,加密,cryptohack,pow,ff,wp,print,import,day
From: https://www.cnblogs.com/Cryglz/p/17379350.html

相关文章

  • day67(2023.5.8)
    1.事件之绑定事件处理器 运行结果: 运行结果: 运行结果: 2.事件之鼠标事件 运行结果: 运行结果: 鼠标进入的时候,灰色块块出来,鼠标移开的时候,灰色块块隐藏。 运行结果: 运行结果: 运行结果: 3.事件之表单事件......
  • WPF-标记扩展简写
     XMAL标记扩展又名:标签扩展含义:用花括号{}包围起来。语法:{标记扩展类参数}基类:System.Windows.Markup.MarkupExtension <!--标记扩展的简写--><!--例1--><ButtonContent="{BindingRelativeSource={RelativeSourceMode=Self},Path=Command.Text}"/><ButtonContent......
  • WPS2021 无法加载此加载项程序 解决办法
    我们多次安装WPS后容易导致WPS的默认加载项位置错误,打开word时提示如下错误1.此时可以通过如下步骤解决:开发工具——加载项——禁用——确定即可以正常使用 2.如果需要加载mathtype加载项,则通过加入正确的路径即可解决:添加——mathtype正确的路径——确定3.重新打开word......
  • wps表格邮件附件部分图片无法预览的问题(1)
    使用邮箱客户端发送带excel附件的邮件时,客户说部分图片无法查看。我方人员测试下,得到如下几点:1.出问题的.xlsx文件下载后可以正常打开查看,但通过给自己邮箱转发邮件(包含附件),foxmail邮箱客户端下预览附件可以发现部分图片预览不正常,部分图片正常显示。出问题的图片处提示“为帮助......
  • WPF注入service,将service作为viewModel参数时,无法进入Model的问题。
    WPF注入service,将service作为viewModel参数时,无法进入Model的问题。一开始以为是注入失败,或者注入的service不对。经过排查,发现是viewModel中的参数service,不是当前包的service,是api通用包中的。....更改之后就可以进入Model了。......
  • Day 29 29.2 MD5摘要算法
    哈希算法--MD5摘要算法【一】Hash算法哈希算法也称摘要算法、散列算法哈希函数的输入为一段可变长度x,输出一固定长度串,该串被称为x的哈希值。Hash函数满足以下几个基本需求:(1)输入值x为任意长度(2)输出值长度固定(3)单向函数,算法不可逆(4)唯一性,很难找到两个不同的输入......
  • Vulnhub-dpwwn01-WP
    前言点击>>下载靶机靶机kalilinux:ip地址为192.168.20.200靶机探测使用nmap探测靶机nmap192.168.20.0/24靶机ip为192.168.20.131使用nmap进行详细扫描nmap-A-p-192.168.20.131点击查看扫描结果rootin/home/kalivia☕v17.0.6…➜nmap-A-p-192.168.2......
  • 软件测试Day2
    1.软件测试相关方案   2.测试用例3.系统缺陷等级4.软件测试原则(了解)  5.软件危机   6.软件开发过程    7.软件工程模型(记)(记)   (记) 8.Scrum敏捷 scrum人员配置 ......
  • 软件测试day1
    1.软件测试过程:2.软件测试目的 3.软件测试相关概念   ......
  • 瑞吉外卖day2
    员工信息分页查询整体实现思路前端页面发送ajax请求,将分页查询参数(page,pagesize,name)提交到服务端服务端Controller接受页面提交的数据并调用Service查询数据Service调用MApper操作数据库,查询分页数据Controller将查询到的分页数据响应给页面页面接收到分页数据并通过Elemen......