一、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做题记录的更多相关文章

  1. UOJ 做题记录

    UOJ 做题记录 其实我这么弱> >根本不会做题呢> > #21. [UR #1]缩进优化 其实想想还是一道非常丝播的题目呢> > 直接对于每个缩进长度统计一遍就好 ...

  2. project euler做题记录

    ProjectEuler_做题记录 简单记录一下. problem 441 The inverse summation of coprime couples 神仙题.考虑答案为: \[\begin{a ...

  3. Sam做题记录

    Sam做题记录 Hihocoder 后缀自动机二·重复旋律5 求一个串中本质不同的子串数 显然,答案是 \(\sum len[i]-len[fa[i]]\) Hihocoder 后缀自动机三·重复旋律 ...

  4. 退役IV次后做题记录

    退役IV次后做题记录 我啥都不会了.... AGC023 D 如果所有的楼房都在\(S\)同一边可以直接得出答案. 否则考虑最左最右两边的票数,如果左边>=右边,那么最右边会投给左边,因为就算车 ...

  5. 退役III次后做题记录(扯淡)

    退役III次后做题记录(扯淡) CF607E Cross Sum 计算几何屎题 直接二分一下,算出每条线的位置然后算 注意相对位置这个不能先搞出坐标,直接算角度就行了,不然会卡精度/px flag:计 ...

  6. 退役II次后做题记录

    退役II次后做题记录 感觉没啥好更的,咕. atcoder1219 历史研究 回滚莫队. [六省联考2017]组合数问题 我是傻逼 按照组合意义等价于\(nk\)个物品,选的物品\(\mod k\) ...

  7. BJOI做题记录

    BJOI做题记录 终于想起还要做一下历年省选题了2333 然而咕了的还是比做了的多2333 LOJ #2178. 「BJOI2017」机动训练 咕了. LOJ #2179. 「BJOI2017」树的难 ...

  8. FJOI2017前做题记录

    FJOI2017前做题记录 2017-04-15 [ZJOI2017] 树状数组 问题转化后,变成区间随机将一个数异或一,询问两个位置的值相等的概率.(注意特判询问有一个区间的左端点为1的情况,因为题 ...

  9. [日记&做题记录]-Noip2016提高组复赛 倒数十天

    写这篇博客的时候有点激动 为了让自己不颓 还是写写日记 存存模板 Nov.8 2016 今天早上买了两个蛋挞 吃了一个 然后就做数论(前天晚上还是想放弃数论 但是昨天被数论虐了 woc noip模拟赛 ...

  10. noip做题记录+挑战一句话题解?

    因为灵巧实在太弱辽不得不做点noip续下命QQAQQQ 2018 积木大赛/铺设道路 傻逼原题? 然后傻逼的我居然检查了半天是不是有陷阱最后花了差不多一个小时才做掉我做过的原题...真的傻逼了我:( ...

随机推荐

  1. C# – Record, Class, Struct

    前言 之前在 C# – 10.0 已经有介绍过 Record 了. 但之前还没怎么用到, 最近有用到了, 所以特别写多一篇. Class vs Struct 参考: C#详解struct和class的 ...

  2. Azure 入门系列 (第二篇 Backup 和 Disaster Recovery)

    本系列 这个系列会介绍从 0 到 1 搭建一个 Web Application 的 Server. 间中还会带上一些真实开发常用的功能. 一共 6 篇 1. Virtual Machine (VM) ...

  3. 靠着这篇笔记,我拿下了16k车载测试offer!

      如何写简历 个人技能 个人技能一般不要超过10条,一般在8条内. 一.测试流程和技术 1.熟悉车载系统研发和测试流程,能独立编写各种测试文档. 2.熟悉车载系统测试用例设计思路,能独立编写仪表和车 ...

  4. [Tkey] Transport Nekomusume II

    CL-20 考虑定义一条有向边 \(u\rightarrow v\) 的意义为 \(u\) 把窝让给了 \(v\),那么每个点一定入度为 \(1\),所有的边会形成一个外向基环树森林. 贪心地把猫娘按 ...

  5. 第6天:基础入门-抓包技术&HTTPS协议&APP&小程序&PC应用&WEB&转发联动

    安装charles 到Windows本地: 安卓模拟器安装: 如果抓模拟器就要使用从远程主机,如果不是,则从所有进程 访问 谷歌浏览器安装证书: PC微信小程序代理抓取: 41:43 :如何将char ...

  6. Nacos 配置加密

    Nacos 配置加密 nacos配置加密官网 官网介绍太简单,而且GitHub 网络受限,随缘访问.Gitee 发现有镜像仓库,同步的最新版本 Gitee nacos 镜像仓库 但是官网中提到的加密插 ...

  7. 15. 序列化模块json和pickle、os模块

    1. 序列化模块 1.1 序列化与反序列化 (1)序列化 将原本的python数据类型字典.列表.元组 转换成json格式字符串的过程就叫序列化 (2)反序列化 将json格式字符串转换成python ...

  8. Android UsbDeviceManager 代码分析

    USBDeviceManager是一个Android系统中用于管理USB设备的类,它是系统服务之一.其主要功能是控制USB设备的连接和断开,以及管理USB设备的权限和状态.下面是对USBDeviceM ...

  9. vuex 的modules 子模块总结

  10. 56.dom如何映射数据

    所谓的映射机制就是 页面的标签和js中获取的页面标签对象,无论修改哪一个,另一个都会随之更新 : 映射原理:浏览器在渲染页面的时候给每一个元素都设置了很多内置的属性(包含样式的),     当我们在J ...