当前位置: 首页 > news >正文

[SWPUCTF 2021 新生赛]crypto9

[MoeCTF 2021]Web安全入门指北—GET

意思是GET传参,moe=flag 就可以得到falg

输入?moe=flag

flag为:

NSSCTF{ff26110b-8793-403c-990e-15c7f1820596}

[SWPUCTF 2021 新生赛]crypto9

#gpt写的代码
from itertools import product
letter_list = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'  # 字母表# 根据输入的key生成key列表
def Get_KeyList(key):key_list = []for ch in key:key_list.append(ord(ch.upper()) - 65)return key_list# 加密函数
def Encrypt(plaintext, key_list):ciphertext = ""i = 0for ch in plaintext:  # 遍历明文if 0 == i % len(key_list):i = 0if ch.isalpha():  # 明文是否为字母,如果是,则判断大小写,分别进行加密if ch.isupper():ciphertext += letter_list[(ord(ch) - 65 + key_list[i]) % 26]i += 1else:ciphertext += letter_list[(ord(ch) - 97 + key_list[i]) % 26].lower()i += 1else:  # 如果密文不为字母,直接添加到密文字符串里ciphertext += chreturn ciphertext# 解密函数
def Decrypt(ciphertext, key):plaintext = ""i = 0for ch in ciphertext:  # 遍历密文if 0 == i % len(key):i = 0if ch.isalpha():  # 密文为否为字母,如果是,则判断大小写,分别进行解密if ch.isupper():plaintext += letter_list[(ord(ch) - 65 - key[i]) % 26]i += 1else:plaintext += letter_list[(ord(ch) - 97 - key[i]) % 26].lower()i += 1else:  # 如果密文不为字母,直接添加到明文字符串里plaintext += chreturn plaintextif __name__ == '__main__':print("请输入密文:")ciphertext = 'AKKPLX{qv5x0021-7n8w-wr05-x25w-7882ntu5q984}'# 穷举密钥组合进行解密for key in product(letter_list, repeat=3):key_list = Get_KeyList("".join(key))plaintext = Decrypt(ciphertext, key_list)print("密钥: %s,明文: %s" % ("".join(key), plaintext))

位移13位用凯撒密码解密得到flag

NSSCTF{dd5f0021-7a8e-ee05-f25e-7882abc5d984}

[鹤城杯 2021]Crazy_Rsa_Tech

源代码

from Crypto.Util.number import *  # 导入PyCryptodome库中的number模块,用于生成大素数等操作
from Crypto.Util.Padding import *  # 导入PyCryptodome库中的Padding模块,用于数据填充# 将字符串 "flag{??????}" 转换为字节串,然后进行填充(使其长度为64字节),最后转换为一个大整数
FLAG = bytes_to_long(pad(b"flag{??????}", 64))def init_key():"""初始化RSA密钥对。:return: RSA模数n、公钥指数e、私钥指数d"""p, q = getPrime(512), getPrime(512)  # 生成两个512位的素数p和qn = p * q  # 计算RSA模数ne = 9  # 设置公钥指数e为9while GCD((p - 1) * (q - 1), e) != 1:  # 确保(p-1)*(q-1)与e互质p, q = getPrime(512), getPrime(512)  # 如果不互质,重新生成p和qn = p * q  # 重新计算RSA模数nd = inverse(e, (p - 1) * (q - 1))  # 计算私钥指数d,使得e*d ≡ 1 (mod (p-1)*(q-1))return n, e, d  # 返回模数n、公钥指数e和私钥指数dn_list = list()  # 存储生成的模数
c_list = list()  # 存储加密后的密文
for i in range(9):  # 循环9次,每次生成一个新的RSA密钥对N, e, d = init_key()  # 调用init_key函数生成新的RSA密钥对n_list.append(N)  # 将生成的模数添加到n_list中c = pow(FLAG, e, N)  # 使用公钥指数e对FLAG进行加密,得到密文cc_list.append(c)  # 将密文c添加到c_list中assert pow(c, d, N) == FLAG  # 验证解密后的结果是否与原始的FLAG相同
print("n_list:", n_list)  # 输出所有生成的模数
print("c_list:", c_list)  # 输出所有生成的密文

最终得到n_list、c_list 这两个在output.txt文件中

攻击代码:

from Crypto.Util import number  # 导入PyCryptodome库中的number模块,用于生成大素数等操作
from gmpy2 import iroot, invert  # 导入gmpy2库中的iroot和invert函数,用于计算整数的根和求逆元# 定义常量
n_list = [ 71189786319102608575263218254922479901008514616376166401353025325668690465852130559783959409002115897148828732231478529655075366072137059589917001875303598680931962384468363842379833044123189276199264340224973914079447846845897807085694711541719515881377391200011269924562049643835131619086349617062034608799 ]  # 省略了具体的数值列表,这里应该是一组模数
c_list = [ 62580922178008480377006528793506649089253164524883696044759651305970802215270721223149734532870729533611357047595181907404222690394917605617029675103788705320032707977225447998111744887898039756375876685711148857676502670812333076878964148863713993853526715855758799502735753454247721711366497722251078739585 ]  # 省略了具体的数值列表,这里应该是对应的密文
e = 9  # RSA公钥指数# 定义中国剩余定理(CRT)函数
def crt(n_list, c_list):"""使用中国剩余定理将多个同余方程组合成一个同余方程。:param n_list: 一组模数:param c_list: 对应的密文:return: 组合后的同余方程的结果"""n = 1for i in n_list:n *= i  # 计算所有模数的乘积N = []for i in n_list:N.append(n // i)  # 计算每个模数的伪逆元t = []for i in range(len(n_list)):t.append(invert(N[i], n_list[i]))  # 计算每个模数的逆元summary = 0for i in range(len(n_list)):summary = (summary + c_list[i] * t[i] * N[i]) % n  # 组合成一个新的同余方程return summary# 使用CRT函数计算组合后的同余方程的结果
M = crt(n_list, c_list)# 计算M^(1/e),即解密后的明文
m = iroot(M, e)[0]# 将解密后的明文转换为字节串并打印出来
flag = long_to_bytes(m)
print(flag)

得到flag

NSSCTF{H0w_Fun_13_HAstads_broadca5t_AtTack!}

http://www.lryc.cn/news/502239.html

相关文章:

  • vue中常用的指令
  • Docker Compose实战三:轻松部署PHP
  • 数据分析实战—房价特征关系
  • 云和恩墨 zCloud 与华为云 GaussDB 完成兼容性互认证
  • 【大语言模型LangChain】 ModelsIO OutputParsers详解
  • PaddleSpeech本地部署文档
  • Android 第三方框架:RxJava:源码分析:责任链模式
  • 网络安全 与 加密算法
  • UE4_贴花_贴花基础知识二
  • ElasticSearch 搜索、排序、分页功能
  • MySQL-9.1.0 实现最基础的主从复制
  • Java中的“泛型“
  • 前端(五)css属性
  • 总结拓展十七:SAP 采购订单行项目“交货“页签解析
  • 分布式日志系统设计
  • DApp开发如何平衡性能与去中心化?
  • RK3588开发笔记-Buildroot编译Qt5WebEngine-5.15.10
  • 2024年12月GESPC++三级真题解析
  • vue-router路由传参的两种方式(params 和 query )
  • Asp.net 做登录验证码(MVC)
  • 在 Chrome中直接调用大型语言模型的API
  • 微信小程序调用腾讯地图-并解读API文档 JavaScript SDK和 WebService API
  • WPF 控件
  • VScode执行任务
  • MySQL(数据类型)
  • pytorch中的tqdm库
  • NoSQL大数据存储技术测试(5)MongoDB的原理和使用
  • 【Golang】Go语言编程思想(六):Channel,第四节,Select
  • Vue2简介
  • EasyPlayer.js播放器如何在iOS上实现低延时直播?