CryptoHack做题记录
一、GENERAL
1.ENCODING
ASCII

ascii = [99, 114, 121, 112, 116, 111, 123, 65, 83, 67, 73, 73, 95, 112, 114, 49, 110, 116, 52, 98, 108, 51, 125]
for char in ascii:
print(chr(char),end='')
crypto{ASCII_pr1nt4bl3}
Hex

Hex='63727970746f7b596f755f77696c6c5f62655f776f726b696e675f776974685f6865785f737472696e67735f615f6c6f747d'
print(bytes.fromhex(Hex))
crypto{You_will_be_working_with_hex_strings_a_lot}
Bytes and Big Integers

from Crypto.Util.number import *
Long = 11515195063862318899931685488813747395775516287289682636499965282714637259206269
print(long_to_bytes(Long))
crypto{3nc0d1n6_4ll_7h3_w4y_d0wn}
2.XOR
XOR Starter

String='label'
for i in String:
print(chr(ord(i)^13),end='')
crypto{aloha}
XOR Properties

from Crypto.Util.number import *
KEY1 = 0xa6c8b6733c9b22de7bc0253266a3867df55acde8635e19c73313
KEY2_KEY1 = 0x37dcb292030faa90d07eec17e3b1c6d8daf94c35d4c9191a5e1e
KEY2_KEY3 = 0xc1545756687e7573db23aa1c3452a098b71a7fbf0fddddde5fc1
FLAG_KEY1_KEY3_KEY2 = 0x4ee9855208a2cd59091d04767ae47963170d1660df7f56f5faf
print(long_to_bytes(FLAG_KEY1_KEY3_KEY2^KEY2_KEY3^KEY1))
crypto{x0r_i5_ass0c1at1v3}
Favourite byte

from Crypto.Util.number import *
a=0x73626960647f6b206821204f21254f7d694f7624662065622127234f726927756d
print(long_to_bytes(a))
A=b"sbi`d\x7fk h! O!%O}iOv$f eb!'#Ori'um"
B=b'crypto{'
for i,j in zip(A,B):
print(i^j)
for i in A:
print(chr(i^16),end='')
- 思路:已知flag头:
crypto{根据此可找到异或的字节
crypto{0x10_15_my_f4v0ur173_by7e}
You either know, XOR you don't
思路:我们已知flag头为
crypto{}我们可以根据这个恢复key
from Crypto.Util.number import *
from pwn import *
a = 0x0e0b213f26041e480b26217f27342e175d0e070a3c5b103e2526217f27342e175d0e077e263451150104
A = b"\x0e\x0b!?&\x04\x1eH\x0b&!\x7f'4.\x17]\x0e\x07\n<[\x10>%&!\x7f'4.\x17]\x0e\x07~&4Q\x15\x01\x04"
B = b'crypto{'
print(xor(long_to_bytes(a), B))
print(xor(b'\x04', b'}'))
恢复出key为:myXORkey
然后解密:
print(xor(long_to_bytes(a),b'myXORkey'))
crypto{1f_y0u_Kn0w_En0uGH_y0u_Kn0w_1t_4ll}
Lemur XOR

两张图片的RGB分别xor:
from PIL import Image
image1 = Image.open(r"D:\download\flag_7ae18c704272532658c10b5faad06d74.png")
pic1 = image1.load()
image2 = Image.open(r"D:\download\lemur_ed66878c338e662d3473f0d98eedbd0d.png")
pic2 = image2.load()
width, height = image1.size
for i in range(width):
for j in range(height):
r1, g1, b1 = pic1[i, j]
r2, g2, b2 = pic2[i, j]
pic1[i, j] = (r1 ^ r2, g1 ^ g2, b1 ^ b2)
image1.show()

3.MATHMATICS
Greatest Common Divisor
求gcd(66528,52920),没什么好说的
Extended GCD
拓展欧几里得:

Modular Arithmetic 1
求余数,略
Modular Arithmetic 2
欧拉定理:
若a和m互质,即\((a,m)\equiv 1\),有\(a^{\varphi(m)}\equiv 1(modm)\)
题目让Calculate 27324678765465536 mod 65537
显然为1
Modular Inverting
求3 * d ≡ 1 mod 13,也就是求3对模13的模逆
print(gmpy2.invert(3,13))
二、MATHEMATICS
1.MODULAR MATH
Quadratic Residues
p = 29
ints = [14, 6, 11]
让我们找出ints列表里模p的二次剩余,需要用到欧拉判别法:

写一个脚本判断一下即可:
ints = [14, 6, 11]
p = 29
for t in ints:
for i in range(1, p):
if pow(i, 2, p) == t:
print(f"{i} ^ 2 = {t} mod 29")
Legendre Symbol
p =
ints = []
我们要求满足\(x^2\equiv ints(modp)\)的x的值
我们需要找到,ints中的这些数,哪些满足\((\frac{a}{p})=1\)
可以写个脚本:
p =
ints = []
num = 0
for a in ints:
if pow(a, p // 2, p) == 1:
print(a)
发现85256449776780591202928235662805033201684571648990042997557084658000067050672130152734911919581661523957075992761662315262685030115255938352540032297113615687815976039390537716707854569980516690246592112936796917504034711418465442893323439490171095447109457355598873230115172636184525449905022174536414781771满足条件
然后根据\((\frac{a}{p})=a^{\frac{p-1}{2}}(modp)\equiv1\)
变形:\(a^{\frac{p+1}{2}}(modp)\equiv a\)
即:$(a^{\frac{p+1} {4}})^{2}\equiv a(modp) $
而正好p是模4余3的,则\(a^{\frac{p+1}{4}}(modp)\)就是我们要找的根
print(pow(a,p//4+1,p))
即为flag
Modular Square Root
使用Tonelli-Shanks算法计算二次剩余
可以用python的sympy模块实现
给出a和p的值,计算\(a^2=x(modp)\)中x的值
from sympy.ntheory.residue_ntheory import nthroot_mod
a =
p =
x = nthroot_mod(a,2,p)
print(x)
Chinese Remainder Theorem
中国剩余定理(CRT)
x ≡ 2 mod 5
x ≡ 3 mod 11
x ≡ 5 mod 17
直接使用sagemath

CryptoHack做题记录的更多相关文章
- UOJ 做题记录
UOJ 做题记录 其实我这么弱> >根本不会做题呢> > #21. [UR #1]缩进优化 其实想想还是一道非常丝播的题目呢> > 直接对于每个缩进长度统计一遍就好 ...
- project euler做题记录
ProjectEuler_做题记录 简单记录一下. problem 441 The inverse summation of coprime couples 神仙题.考虑答案为: \[\begin{a ...
- Sam做题记录
Sam做题记录 Hihocoder 后缀自动机二·重复旋律5 求一个串中本质不同的子串数 显然,答案是 \(\sum len[i]-len[fa[i]]\) Hihocoder 后缀自动机三·重复旋律 ...
- 退役IV次后做题记录
退役IV次后做题记录 我啥都不会了.... AGC023 D 如果所有的楼房都在\(S\)同一边可以直接得出答案. 否则考虑最左最右两边的票数,如果左边>=右边,那么最右边会投给左边,因为就算车 ...
- 退役III次后做题记录(扯淡)
退役III次后做题记录(扯淡) CF607E Cross Sum 计算几何屎题 直接二分一下,算出每条线的位置然后算 注意相对位置这个不能先搞出坐标,直接算角度就行了,不然会卡精度/px flag:计 ...
- 退役II次后做题记录
退役II次后做题记录 感觉没啥好更的,咕. atcoder1219 历史研究 回滚莫队. [六省联考2017]组合数问题 我是傻逼 按照组合意义等价于\(nk\)个物品,选的物品\(\mod k\) ...
- BJOI做题记录
BJOI做题记录 终于想起还要做一下历年省选题了2333 然而咕了的还是比做了的多2333 LOJ #2178. 「BJOI2017」机动训练 咕了. LOJ #2179. 「BJOI2017」树的难 ...
- FJOI2017前做题记录
FJOI2017前做题记录 2017-04-15 [ZJOI2017] 树状数组 问题转化后,变成区间随机将一个数异或一,询问两个位置的值相等的概率.(注意特判询问有一个区间的左端点为1的情况,因为题 ...
- [日记&做题记录]-Noip2016提高组复赛 倒数十天
写这篇博客的时候有点激动 为了让自己不颓 还是写写日记 存存模板 Nov.8 2016 今天早上买了两个蛋挞 吃了一个 然后就做数论(前天晚上还是想放弃数论 但是昨天被数论虐了 woc noip模拟赛 ...
- noip做题记录+挑战一句话题解?
因为灵巧实在太弱辽不得不做点noip续下命QQAQQQ 2018 积木大赛/铺设道路 傻逼原题? 然后傻逼的我居然检查了半天是不是有陷阱最后花了差不多一个小时才做掉我做过的原题...真的傻逼了我:( ...
随机推荐
- QT原理与源码分析之对象级QT事件过滤器
本文简略介绍了QT原理与源码分析中的QT对象级事件过滤器的自定义过滤函数.对象级事件过滤器的安装过程,以及安装函数的源码实现. 自定义QT事件过滤器的过滤函数的实现: 事件过滤器被调用时执行的函数代码 ...
- vant2 自动检查表单验证 -validate
ref 给 <van-form @submit="onSubmit" ref="form"> 标签 : // 检验手机号是否合格 await thi ...
- 57.dom递归退出循环的时机
递归的终止条件一般定义在递归函数内部,在递归调用前要做一个条件判断,根据判断的结果选择是继续调用自身,还是return:返回终止递归. 终止的条件: 1.判断递归的次数是否达到某一限定值 2.判断运算 ...
- Android复习(五)设备兼容—>支持刘海屏
支持刘海屏 刘海屏是指某些设备显示屏上的一个区域延伸到显示面,这样既能为用户提供全面屏体验,又能为设备正面的重要传感器留出空间.Android 在搭载 Android 9(API 级别 28)及更高版 ...
- Centos7 安装配置FTP服务
1.FTP简介 ftp(File Transfer Protocol文件传输协议)是基于TCP/IP 协议的应用层协议,用于文件的传输,包括ftp服务器(或服务端)和ftp客户端 FTP协议会在客户端 ...
- 最后的组合:K8s 1.24 基于 Hekiti 实现 GlusterFS 动态存储管理实践
前言 知识点 定级:入门级 GlusterFS 和 Heketi 简介 GlusterFS 安装部署 Heketi 安装部署 Kubernetes 命令行对接 GlusterFS 实战服务器配置(架构 ...
- KubeSphere 社区双周报 | OpenFunction 集成 WasmEdge | 2023.02.03-02.16
KubeSphere 社区双周报主要整理展示新增的贡献者名单和证书.新增的讲师证书以及两周内提交过 commit 的贡献者,并对近期重要的 PR 进行解析,同时还包含了线上/线下活动和布道推广等一系列 ...
- 网页设计中常用的Web英文安全字体
原文地址:https://www.openkee.com/post-176.html 在 Web 编码中,CSS 默认应用的 Web 字体是有限的,你能看到的字体别人未必看得到.虽然在新版本的CSS3 ...
- JS 本地存储 localStorage 操作总结
现在前端做数据存储,跨页面传值,localStorage是一个很好的方式,以键值对的方式存储,也方便取值赋值,下面说一说使用方法和一些常见的使用技巧. 1.存值共有3种方式,localStorage相 ...
- 2024 Navicat Premium 16+17安装教程(附激活方法)
Navicat Premium,作为一款功能全面的集成数据库管理工具,无缝支持多样化的数据库类型,为用户带来前所未有的高效与便捷管理体验.它不仅涵盖了连接管理.数据导入导出.同步迁移.备份恢复等核心功 ...