天道酬勤,学无止境

2021-07-04

[GWCTF 2019]BabyRSA

标题
secret

N=636585149594574746909030160182690866222909256464847291783000651837227921337237899651287943597773270944384034858925295744880727101606841413640006527614873110651410155893776548737823152943797884729130149758279127430044739254000426610922834573094957082589539445610828279428814524313491262061930512829074466232633130599104490893572093943832740301809630847541592548921200288222432789208650949937638303429456468889100192613859073752923812454212239908948930178355331390933536771065791817643978763045030833712326162883810638120029378337092938662174119747687899484603628344079493556601422498405360731958162719296160584042671057160241284852522913676264596201906163
m1=90009974341452243216986938028371257528604943208941176518717463554774967878152694586469377765296113165659498726012712288670458884373971419842750929287658640266219686646956929872115782173093979742958745121671928568709468526098715927189829600497283118051641107305128852697032053368115181216069626606165503465125725204875578701237789292966211824002761481815276666236869005129138862782476859103086726091860497614883282949955023222414333243193268564781621699870412557822404381213804026685831221430728290755597819259339616650158674713248841654338515199405532003173732520457813901170264713085107077001478083341339002069870585378257051150217511755761491021553239
m2=487443985757405173426628188375657117604235507936967522993257972108872283698305238454465723214226871414276788912058186197039821242912736742824080627680971802511206914394672159240206910735850651999316100014691067295708138639363203596244693995562780286637116394738250774129759021080197323724805414668042318806010652814405078769738548913675466181551005527065309515364950610137206393257148357659666687091662749848560225453826362271704292692847596339533229088038820532086109421158575841077601268713175097874083536249006018948789413238783922845633494023608865256071962856581229890043896939025613600564283391329331452199062858930374565991634191495137939574539546

encrypt

import hashlib
import sympy
from Crypto.Util.number import *

flag = 'GWHT{******}'
secret = '******'

assert(len(flag) == 38)

half = len(flag) / 2

flag1 = flag[:half]
flag2 = flag[half:]

secret_num = getPrime(1024) * bytes_to_long(secret)

p = sympy.nextprime(secret_num)
q = sympy.nextprime(p)

N = p * q

e = 0x10001

F1 = bytes_to_long(flag1)
F2 = bytes_to_long(flag2)

c1 = F1 + F2
c2 = pow(F1, 3) + pow(F2, 3)
assert(c2 < N)

m1 = pow(c1, e, N)
m2 = pow(c2, e, N)

output = open('secret', 'w')
output.write('N=' + str(N) + '\n')
output.write('m1=' + str(m1) + '\n')
output.write('m2=' + str(m2) + '\n')
output.close()

解题
首先我们知道这题的flag长度为38
而且rsa加密中的p和q相似,q是p的下一个素数

然后我们已知n、m1、m2、e

可以通过将n开平方的方式得到p、q,进而得到c1、c2

n2=gmpy2.iroot(N,2)[0]
p=sympy.nextprime(n2)
q=N//p
phi=(p-1)*(q-1)
d=gmpy2.invert(e,phi)
c1=pow(m1,d,N)
c2=pow(m2,d,N)

然后通过解方程得到F1、F2

a=3*c1
b=-3*pow(c1,2)
c=pow(c1,3)-c2
delta=gmpy2.iroot(pow(b,2)-4*a*c,2)[0]
F2=(-b+delta)//(2*a)
F1=c1-F2

最后得到flag

print(hex(F2)[2:].decode('hex')+hex(F1)[2:].decode('hex'))

参考解题:https://blog.csdn.net/weixin_44017838/article/details/104968540

但是我在运行的时候遇到了错误:AttributeError: ‘str’ object has no attribute 'decode’

是因为Python2和Python3在字符串编码上的区别造成的

Python3的str 默认不是bytes,所以不能decode。
只能先encode转为bytes,再decode

改了,依旧报错:LookupError: ‘hex’ is not a text encoding; use codecs.decode() to handle arbitrary codecs

python2下是不报错的,因为python2内部的表示是unicode编码,因此,在做编码转换时,通常需要以unicode作为中间编码,即先将其他编码的字符串解码(decode)成unicode (str–>decode()–>bytes),再从unicode编码(encode)成另一种编码(bytes–>encode()–>str)。python3报错,因为python3内部表示为utf-8。

知道是怎么回事了依旧没找到解决办法
所以将最后输出改成了

print(hex(F2)[2:]+hex(F1)[2:])

得到475748547b66373039653065326366653765353330636138393732393539613130333362327d

最后hex解密,得到
GWHT{f709e0e2cfe7e530ca8972959a1033b2}

答案
flag{f709e0e2cfe7e530ca8972959a1033b2}

SameMod

题目
When people use same mod ,what’s wrong?

{6266565720726907265997241358331585417095726146341989755538017122981360742813498401533594757088796536341941659691259323065631249,773}
{6266565720726907265997241358331585417095726146341989755538017122981360742813498401533594757088796536341941659691259323065631249,839}

message1=3453520592723443935451151545245025864232388871721682326408915024349804062041976702364728660682912396903968193981131553111537349
message2=5672818026816293344070119332536629619457163570036305296869053532293105379690793386019065754465292867769521736414170803238309535

解密
已知两个m,一样的n,两个e

共模攻击

import gmpy2
from Crypto.Util.number import long_to_bytes

e1 = 773
e2 = 839

n=6266565720726907265997241358331585417095726146341989755538017122981360742813498401533594757088796536341941659691259323065631249

c1=3453520592723443935451151545245025864232388871721682326408915024349804062041976702364728660682912396903968193981131553111537349
c2=5672818026816293344070119332536629619457163570036305296869053532293105379690793386019065754465292867769521736414170803238309535

_, r, s = gmpy2.gcdext(e1, e2)

m = pow(c1, r, n) * pow(c2, s, n) % n

print(m)

得到
1021089710312311910410111011910111610410511010710511610511511211111511510598108101125

尝试了long_to_bytes,不对;尝试了hex,不对

最后知道是ASCII码

result=str(m)
flag=""
i=0
while i < len(result):
    if result[i]=='1':
        c=chr(int(result[i:i+3]))
        i+=3
    else:
        c=chr(int(result[i:i+2]))
        i+=2
    flag+=c
print(flag)

答案
flag{whenwethinkitispossible}

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • Pandas时间序列数据处理和datetime模块详细教程
    时间序列分析中,常常需要处理时间相关数据,故参考《Python for Data Analysis》总结了Python和Pandas常用的时间序列数据处理的相关操作,并在 Python3.8.0 的 jupyter notebook 环境下测试通过。 源码已上传到 github:https://github.com/datamonday/Time-Series-Analysis-Tutorial/ 自取,欢迎star,fork! 文章目录 重要的Python库NumPyPandasmatplotlibIPythonScipy Python 标准库collectionsfunctoolsitertoolsoperator 1. IPython1.1 IPython基本使用1) 内省 introspection2) `%run` 命令运行 `.py` 文件3) `%paste` 执行剪切板的代码4) `%timeit` 检测语句平均执行时间5) 魔术命令之后添加 `?` 查看帮助 1.2 常用的IPython魔术命令1.3 使用命令历史1) 搜索并重用命令历史2) 记录输入和输出 1.4 与操作系统交互1) shell命令和别名2) 目录书签系统3) 与系统相关的魔术命令 1. 日期和时间数据类型1.1 Datetime Format1.2 datetime.datetime1.3
  • NXUOJ C语言期末考试部分题解
    1、China No 1! 问题描述 4月29日,执行我国空间站“天和”核心舱任务的长征五号(CZ-5)B遥二运载火箭(爱称:胖五),在中国文昌航天发射场点火发射。 相信只要你看了直播,一定会为我们强大的祖国而感动,感动得只想打出China No 1! 那么本题请你编程使用程序输出China No 1! 题解 python参考解答 ''' Author: Gu Jiakai Date: 2021-07-02 21:08:32 LastEditTime: 2021-07-02 21:56:51 LastEditors: Gu Jiakai Description: FilePath: \nxuoj\China No 1!.py ''' print("China No 1!") C++参考解答 /*** * @Author: Gu Jiakai * @Date: 2021-07-02 21:58:15 * @LastEditTime: 2021-07-02 22:07:32 * @LastEditors: Gu Jiakai * @Description: * @FilePath: \nxuoj\ChinaNo1.cpp */ #include <cstdio> using namespace std; int main() { printf("%s\n","China No 1!")
  • 2021-07-04
    Java中static修饰符用法 修饰变量与方法 package com.gao.oop.demo07; public class Student { private static int age;//静态成员 private double score;//非静态成员 public void run(){ go();//静态方法不能调用非静态方法 } public static void go(){ //run();//错误//非静态方法不能调用静态方法 } public static void main(String[] args) { Student student = new Student(); //对象可以调用静态与非静态成员 System.out.println(student.score); System.out.println(student.age); //类可以调用静态,不能调用非静态 //System.out.println(Student.score);//错误//不能调用非静态 System.out.println(Student.age); new Student().run();//非静态方法需要用对象调用 Student.go();//静态方法可由类直接调用 go();//静态方法可直接调用 } } 代码块 package com.gao.oop
  • Pandas 10-时序数据
    Pandas 10-时序数据 import numpy as np import pandas as pd 一、时序中的基本对象 时间序列的概念在日常生活中十分常见,但对于一个具体的时序事件而言,可以从多个时间对象的角度来描述。例如2020年9月7日周一早上8点整需要到教室上课,这个课会在当天早上10点结束,其中包含了哪些时间概念? 第一,会出现时间戳(Date times)的概念,即’2020-9-7 08:00:00’和’2020-9-7 10:00:00’这两个时间点分别代表了上课和下课的时刻,在pandas中称为Timestamp。同时,一系列的时间戳可以组成DatetimeIndex,而将它放到Series中后,Series的类型就变为了datetime64[ns],如果有涉及时区则为datetime64[ns, tz],其中tz是timezone的简写。 第二,会出现时间差(Time deltas)的概念,即上课需要的时间,两个Timestamp做差就得到了时间差,pandas中利用Timedelta来表示。类似的,一系列的时间差就组成了TimedeltaIndex, 而将它放到Series中后,Series的类型就变为了timedelta64[ns]。 第三,会出现时间段(Time spans)的概念,即在8点到10点这个区间都会持续地在上课
  • 2021-07-04
    标题官网下载eclipse后打不开,并且jdk已经配置好,并且也没有反应 小伙伴相信是不是很苦恼,eclipse明明是在官网下载,可为什么还是安装不了,并且在CSDN 上找到的方法也不行,相信得到最大的解决方法是说jdk没有配置好,可明明已经配置好了的,验证也通过了,可还是没有反应,放心,烟岚给你解决这个问题了,经过我一天的测试(实测)终于解决了,首先,声明一点,某些地方所说的下载安装包,这是是有用的,我就是这样安装上的,但因为包文件有点大,上传有些麻烦,只能私信我。 声明我这个eclipse安装包只是2021年6月版,jdk也是同年最新版。 来源:https://blog.csdn.net/m0_57690236/article/details/118455250
  • 2021-07-04
    有没有大佬告诉我关于Java的工作了写的项目都是什么类的项目呢 来源:https://blog.csdn.net/weixin_46633525/article/details/118448138
  • 2021-07-04
    常用DOS命令 #盘符切换 cd C: #从C盘切换到F盘 cd /d F: #查看当前目录下的所有文件 dir #清理屏幕 cls #退出终端 exit #查看电脑ip ipconfig #ping 一个网站 ping www.baidu.com #打开应用 #计算器 calc #画图 mspaint #记事本 notepad #文件操作 #创建文件夹 md 文件名 #删除文件夹 rd 文件名 #创建文件 cd> 文件名 #删除文件 del 文件名 来源:https://blog.csdn.net/qq_42487700/article/details/118448357
  • 2021-07-04
    本来写了个思维导图,还是觉得很麻烦。直接看书把,《Java核心技术·卷 I(原书第10版)》,只看第3、4、5、6、7、9章就行了。思维导图也贴出来了,仅作参考。网上pdf很多,我就不把资源传上来了。 ps:看视频是很笨很笨的学习方法,看书会效率高很多。看到某些知识点不懂了就搜博客,或者找视频里面某一集看看。 来源:https://blog.csdn.net/ac_hexin/article/details/118448489
  • 2021-07-04 简易瀑布流原理
    简易瀑布流 window.onload = function () { // 封装方法获取数组当前所有项最小值的下标 function getMinIndex(arr) { return [].indexOf.call(arr, Math.min.apply(null, arr)) } // 背景图片瀑布流函数 // 获去节点容器 var bgPicList = document.querySelector('.bgPicList') // 获取所有节点 var picItems = document.getElementsByClassName('picItem') // 用于储存数据高度的数组 var _arr = [] // 循环所有的子节点 for (var i = 0; i < picItems.length; i++) { // 给基础盒子宽度 picItems[i].style.width = '172' + 'px' if (i < 2) { // 储存 第一行容器的高度 _arr.push(picItems[i].offsetHeight) picItems[i].style.top = '0' + 'px' // 第一列定位 if ((i + 1) % 2 == 1) { picItems[i].style.left = '0' + 'px' } else {
  • 2021-07-04
    层次数据结构: 特点:所有数据全部都是一对多的树形关系。 层次数据结构的表现方式:链表结构最适合表示,目录和文件就是可以利用的对象。此外,ini文件结合文件名最多可以表示三层,如果结合目录结构,用途非常可观。实际使用中可根据具体情况,比如数据量大小,层次阶数,访问频率和速度,酌情选用适合的方式。 来源:https://blog.csdn.net/weixin_42383883/article/details/118456986
  • 2021-07-04
    来源:https://blog.csdn.net/qq_56006957/article/details/118457231
  • 2021-07-04
    m3u8格式直播地址 阿里云视频多媒体专场 https://yunqivedio.alicdn.com/2017yq/v2/0x0/96d79d3f5400514a6883869399708e11/96d79d3f5400514a6883869399708e11.m3u8 CCTV-1到CCTV-14,改为相应cctv1hd就可以 http://ivi.bupt.edu.cn/hls/cctv1hd.m3u8 CHC高清电影 http://ivi.bupt.edu.cn/hls/chchd.m3u8 北京卫视高清 http://ivi.bupt.edu.cn/hls/btv1hd.m3u8 北京文艺高清 http://ivi.bupt.edu.cn/hls/btv2hd.m3u8 北京体育高清 http://ivi.bupt.edu.cn/hls/btv6hd.m3u8 北京纪实高清 http://ivi.bupt.edu.cn/hls/btv11hd.m3u8 湖南卫视高清 http://ivi.bupt.edu.cn/hls/hunanhd.m3u8 浙江卫视高清 http://ivi.bupt.edu.cn/hls/zjhd.m3u8 江苏卫视高清 http://ivi.bupt.edu.cn/hls/jshd.m3u8 东方卫视高清 http://ivi.bupt.edu
  • 2021-07-04
    第一个小爬虫 爬虫准备 pip install requests 爬虫的定义 爬虫是指通过编写程序来获取到互联网上的资源 from urllib.request import urlopen url = "http://www.baidu.com" resp = urlopen(url) # 打开网址 with open("mybaidu.html", mode="w", encoding="utf-8") as f: # utf-8 解决乱码问题 f.write(resp.read().decode("utf-8")) # resp.read().decode("utf-8") UTF-8 UTF-8(8位元,Universal Character Set/Unicode Transformation Format)是针对Unicode的一种可变长度字符编码。它可以用来表示Unicode标准中的任何字符,而且其编码中的第一个字节仍与ASCII相容,使得原来处理ASCII字符的软件无须或只进行少部分修改后,便可继续使用。因此,它逐渐成为电子邮件、网页及其他存储或传送文字的应用中,优先采用的编码。 实现截图 来源:https://blog.csdn.net/nanianxiaosa/article/details/118459737
  • 2021-07-04
    Markdown学习 标题 三级标题 四级标题 hello,World hello,world hello,World hello,World 引用 刘渝州 分割线 图片 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SjeaMDu6-1625370836963)(C:\Windows\System32\setup.jpg)] 超链接 点击打开百度搜图 列表 A B C A B C 表格 名字性别生日张三男2001.1.1 代码 hello 来源:https://blog.csdn.net/lyz2723727260/article/details/118460450
  • 2021-07-04
    【项目实训】git操作 来源:https://blog.csdn.net/Aleckson/article/details/118460683
  • 2021-07-04 python之excel操作-zip函数的使用
    """ li1 = ['user', 'passwd', 'check'] li2 = ["python27","lemonban66666",{"code": 0, "msg": "登录成功"}] res = zip(li1,li2) print(dict(res)) """ import os # abspath查看路径/join拼接 file_path = os.path.join(os.path.dirname(os.path.abspath(__file__)),"login_cases.xlsx") # print(file_path) # 1、加载excel数据文件 from openpyxl import load_workbook wb = load_workbook(file_path) # 2、根据表单名选择表单:wb["表单名"] sh = wb["login"] all_datas = [] # # 获取excel表格当中所有的测试数据 # 1、拿到字典的key值: # print(list(sh.rows)[0]) # (<Cell 'login'.A1>, <Cell 'login'.B1>, <Cell 'login'.C1>) titles = [] for item in list(sh.rows)[0]: # 遍历第1行当中每一列 titles
  • 2021-07-04
    ** 数组的静态和动态的初始化 ** public class Array01 { public static void main(String[] args) { //动态创建数组 int[] ints = new int[7]; ints[0]=1; ints[1]=2; ints[2]=3; ints[3]=4; ints[4]=5; ints[5]=6; //动态数组的遍历 for (int i = 0; i <ints.length-1 ; i++) { System.out.println(ints[i]); } //静态数组创建 int[]ints1={1,2,3,3,4}; //静态数组的遍历 for (int i = 0; i <ints.length-1 ; i++) { System.out.println(ints1[i]); } } } 来源:https://blog.csdn.net/weixin_48863184/article/details/118461079
  • 2021-07-04
    箭头函数和普通函数无区别 来源:https://blog.csdn.net/qq_45716607/article/details/118461105
  • 网站进一步搭建(三)2021-07-04
    股票数据选择 在股票数据指标可视化的时候需要选择一支股票并加载数据 实现代码 <template> <div> <el-table ref="singleTable" :data="tableData" highlight-current-row @current-change="handleCurrentChange" style="width: 100%"> <el-table-column type="index" width="50px"> </el-table-column> <el-table-column property="code" label="代号" width="100px"> </el-table-column> <el-table-column property="name" label="简称" width="200px"> </el-table-column> </el-table> <div style="margin-top: 20px"> <el-button @click="load">加载数据</el-button> <el-button @click="setCurrent()">取消选中</el-button> </div> </div> </template> <script> export default { name
  • 2021-07-04
    JavaWeb 配置文件总结 pom.xml依赖包 pom.xml 这是一个配置文件,可在文件内导入maven依赖包。 依赖包 <dependencies> <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api --> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>4.0.1</version> <scope>provided</scope> </dependency> <!-- https://mvnrepository.com/artifact/javax.servlet.jsp/javax.servlet.jsp-api --> <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>javax.servlet.jsp-api</artifactId> <version>2.3.3</version> <scope>provided</scope> </dependency> <dependency> <groupId>javax.mail</groupId>