首页 > 其他分享 >[SWPUCTF 2021 新生赛]crypto9

[SWPUCTF 2021 新生赛]crypto9

时间:2024-12-14 20:03:46浏览次数:6  
标签:ch SWPUCTF list 模数 flag 2021 key 密文 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 = 0
    for ch in plaintext:  # 遍历明文
        if 0 == i % len(key_list):
            i = 0
        if ch.isalpha():  # 明文是否为字母,如果是,则判断大小写,分别进行加密
            if ch.isupper():
                ciphertext += letter_list[(ord(ch) - 65 + key_list[i]) % 26]
                i += 1
            else:
                ciphertext += letter_list[(ord(ch) - 97 + key_list[i]) % 26].lower()
                i += 1
        else:  # 如果密文不为字母,直接添加到密文字符串里
            ciphertext += ch
    return ciphertext


# 解密函数
def Decrypt(ciphertext, key):
    plaintext = ""

    i = 0
    for ch in ciphertext:  # 遍历密文
        if 0 == i % len(key):
            i = 0
        if ch.isalpha():  # 密文为否为字母,如果是,则判断大小写,分别进行解密
            if ch.isupper():
                plaintext += letter_list[(ord(ch) - 65 - key[i]) % 26]
                i += 1
            else:
                plaintext += letter_list[(ord(ch) - 97 - key[i]) % 26].lower()
                i += 1
        else:  # 如果密文不为字母,直接添加到明文字符串里
            plaintext += ch
    return plaintext


if __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和q
    n = p * q  # 计算RSA模数n
    e = 9  # 设置公钥指数e为9
    while GCD((p - 1) * (q - 1), e) != 1:  # 确保(p-1)*(q-1)与e互质
        p, q = getPrime(512), getPrime(512)  # 如果不互质,重新生成p和q
        n = p * q  # 重新计算RSA模数n
    d = inverse(e, (p - 1) * (q - 1))  # 计算私钥指数d,使得e*d ≡ 1 (mod (p-1)*(q-1))
    return n, e, d  # 返回模数n、公钥指数e和私钥指数d

n_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进行加密,得到密文c
    c_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 = 1
    for 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 = 0
    for 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!}

标签:ch,SWPUCTF,list,模数,flag,2021,key,密文,crypto9
From: https://blog.csdn.net/ming20211016/article/details/144250289

相关文章

  • 20222428 2021-2022-2 《网络与系统攻防技术》实验八实验报告
    1.实验内容实验内容及要求(1)Web前端HTML能正常安装、启停Apache。理解HTML,理解表单,理解GET与POST方法,编写一个含有表单的HTML。(2)Web前端javascipt理解JavaScript的基本功能,理解DOM。在(1)的基础上,编写JavaScript验证用户名、密码的规则。用户点击登陆按钮后回显“欢迎+......
  • 20222308 2021-2022-7 《网络与系统攻防技术》实验七实验报告
    1.实验内容本实践的目标理解常用网络欺诈背后的原理,以提高防范意识,并提出具体防范方法。具体实践有(1)简单应用SET工具建立冒名网站SET工具:是一个用于社会工程学攻击的工具集,它可以帮助攻击者模拟各种网络攻击场景,包括钓鱼网站攻击、口令截取攻击等。在实验中,通过使用SET工具,可......
  • 20222413 2021-2022-1 《网络与系统攻防技术》实验八实验报告
    1.实验内容1.1本周学习内容:本周学习内容为简单登录网页的前后端编写,以及如何对网页进行sql注入攻击、xss攻击、CSRF攻击。1.2实验内容(1)Web前端HTML能正常安装、启停Apache。理解HTML,理解表单,理解GET与POST方法,编写一个含有表单的HTML。(2)Web前端javascipt理解JavaScript......
  • 20222412 2021-2022-2 《网络与系统攻防技术》实验八实验报告
    202224122021-2022-2《网络与系统攻防技术》实验八实验报告1.实验内容(1)Web前端HTML能正常安装、启停Apache。理解HTML,理解表单,理解GET与POST方法,编写一个含有表单的HTML。(2)Web前端javascipt理解JavaScript的基本功能,理解DOM。在(1)的基础上,编写JavaScript验证用户名、密......
  • 20222409 2021-2022-2 《网络与系统攻防技术》实验八实验报告
    1.实验内容1.1本周学习内容复习前后端区别:了解了前端主要负责页面展示和交互,使用技术如HTML、CSS、JS;后端则负责数据处理和业务逻辑,使用Java、Python等语言。掌握SQL注入原理:学习了如何通过SQL注入绕过登录验证,例如利用'OR1=1--注入绕过登录。了解了普通注入与盲注入的区......
  • AutoCAD2021二次开发——入门
    前言:本文是基于AutoCAD2021SDK 即ObjectARX_for_AutoCAD_2021_Win_64bit_dlm,实现AutoCAD二次开发,主要讲解如何基于SDK实现自己初步简单的命令开发。开发环境搭建下载安装如下软件以及SDKAutoCAD2021、VisiualStudio2019、ObjectARXWizard2021、ObjectARX_for_Aut......
  • 20222327 2021-2022-2 《网络与系统攻防技术》实验八实验报告
    一、实验内容1.复习了Web前端语言:HTML、JavaScript(JS)、CSS,对JS、Java、Jsp进行了辨析;后端语言:C、Java、PHP、Python、C#2.对于数据库:增删改查,、create/select/delete/update/insert………………3.SQLServe、MySql、Oracle。4.针对Web的攻击主要有以下三种:SQL注入XSS跨站脚本......
  • 20222409 2021-2022-2 《网络与系统攻防技术》实验七实验报告
    1.实验内容1.1本周学习内容学习了SET和Ettercap工具的使用,掌握了ARP污染和DNS欺骗的攻击原理与过程。了解钓鱼网站的工作原理及防范措施。学习了Web安全基础,掌握前后端概念和常用技术(如前后端区别、java和js区别、前后端编程语言的特点和应用场景等)。深入理解SQL注入和XSS......
  • 20222327 2021-2022-2 《网络与系统攻防技术》实验七实验报告
    一、实验内容1.学习内容本周学习了一些Web安全的基础知识以及一些常见的攻击技术。分别从前端和后端总结防护、攻击的重点和方式,学习了如何识别和防范常见的Web安全漏洞。同时还学习了SQL注入的原理,了解了通过恶意SQL语句对数据库进行攻击以做到特殊的目的,并学习了防范SQL注入的......
  • 20222419 2021-2022-2 《网络与系统攻防技术》实验八实验报告
    1.实验内容(1)Web前端HTML能正常安装、启停Apache。理解HTML,理解表单,理解GET与POST方法,编写一个含有表单的HTML。(2)Web前端javascipt理解JavaScript的基本功能,理解DOM。在(1)的基础上,编写JavaScript验证用户名、密码的规则。在用户点击登陆按钮后回显“欢迎+输入的用户名”......