NSScrypto--第一页

[鹤城杯 2021]easy_crypto--核心价值观解码

使用在线工具直接解密得到flag

CTF在线工具-在线核心价值观编码|核心价值观编码算法|Core Values Encoder

flag{IlUqU9O5guX6YiITsRNPiQmbhNRjGuTP}

[强网拟态 2021]拟态签到题--BASE64

打开后看着像是BASE64编码,一样使用在线工具解码

Base64 在线编码解码 | Base64 加密解密 - Base64.us

 

flag{GaqY7KtEtrVIX1Q5oP5iEBRCYXEAy8rT} 

[SWPUCTF 2021 新生赛]crypto8--UUencode加密

 打开后我也不知道是什么,题目提示古典密码,看了师傅们才知道是UUencode加密(第一次见)还是在网上找在线工具就行

在线uuencode编码解码-ME2在线工具

 

NSSCTF{cheese_is_power} 

[SWPUCTF 2021 新生赛]crypto7--MD5

打开后得到这个,数了一下32位,MD5加密过的,在线工具解密即可

MD5免费在线解密破解_MD5在线加密-SOMD5

 

NSSCTF{md5yyds}

 [SWPUCTF 2021 新生赛]crypto6

也是base家族,已经给了提示,经过了三层编码,分别是base64,base32,base16,反过来分别解码即可

在线工具 - Bugku CTF

 解码得到

JZLVK6CNKRATKT2ENN2FUR2NGBGXSMDYLFWVC6SMKRAXOWLKKF2E6VCBO5HVISLXJZVEKMKPI5NGY===

继续

NWUxMTA5ODktZGM0My0xYmQzLTAwYjQtOTAwOTIwNjE1OGZl

5e110989-dc43-1bd3-00b4-9009206158fe

 [SWPUCTF 2021 新生赛]ez_caesar

打开后是一个python附件

import base64
def caesar(plaintext):
    str_list = list(plaintext)
    i = 0
    while i < len(plaintext):
        if not str_list[i].isalpha():
            str_list[i] = str_list[i]
        else:
            a = "A" if str_list[i].isupper() else "a"
            str_list[i] = chr((ord(str_list[i]) - ord(a) + 5) % 26 + ord(a) or 5)
        i = i + 1

    return ''.join(str_list)

flag = "*************************"
str = caesar(flag)
print(str)

#str="U1hYSFlLe2R0em1mYWpwc3RiaGZqeGZ3fQ=="

分析后面注释,str的后面有==,猜测是base64,先解码

得到

SXXHYK{dtzmfajpstbhfjxfw}

再来分析一下代码,其中else那儿的大致意思就是将字母后移5位,大小字母需分别处理,那我们解码后向前移5位即可

代码

# 给定加密字符串
str = "SXXHYK{dtzmfajpstbhfjxfw}"
flag = ''

# 遍历字符串中的每个字符
for i in str:
    # 检查字符是否不是字母
    if not i.isalpha():
        flag += i  # 如果不是字母,直接添加到标志中
    else:
        a = 'A' if i.isupper() else 'a'  # 确定字符是大写还是小写
        # 使用凯撒密码进行解密,偏移量为5
        flag += chr((ord(i) - ord(a) - 5) % 26 + ord(a))

# 打印解密后的字符串
print(flag)

得到flag

NSSCTF{youhaveknowcaesar}

 [SWPUCTF 2021 新生赛]crypto10--凯撒

提示了凯撒,直接用在线工具就行了

枚举找到了NSSCTF

NSSCTF{congratulations!!!} 

[SWPUCTF 2021 新生赛]pigpig--猪圈密码

打开后是一张图片,下面一串字符,这是猪圈密码,按照图一一对应

解出明文为(就是flag)

whenthepigwanttoeat

 [鹤城杯 2021]A_CRYPTO

4O595954494Q32515046324757595N534R52415653334357474R4N575955544R4O5N4Q46434S4O59474253464Q5N444R4Q51334557524O5N4S424944473542554O595N44534O324R49565746515532464O49345649564O464R4R494543504N35

 首先,有数字和字母,且没有等号,猜测是ROT13

ROT-13 编码是一种每一个字母被另一个字母代替的方法。这个代替字母是由原来的字母向前移动 13 个字母而得到的。数字和非字母字符保持不变。
提示:编码和解码都是由相同的函数完成的。如果您把一个已编码的字符串作为参数,那么将返回原始字符串。

工具:str_rot13加密解密

4B595954494D32515046324757595A534E52415653334357474E4A575955544E4B5A4D46434F4B59474253464D5A444E4D51334557524B5A4F424944473542554B595A44534B324E49565746515532464B49345649564B464E4E494543504A35 

发现字母范围是A-F,判断是base16

KYYTIM2QPF2GWYZSNRAVS3CWGNJWYUTNKZMFCOKYGBSFMZDNMQ3EWRKZOBIDG5BUKYZDSK2NIVWFQU2FKI4VIVKFNNIECPJ5 

只有数字和字母,没有0,1,猜测是base32编码 

V143Pytkc2lAYlV3SlRmVXQ9X0dVdmd6KEYpP3t4V29+MElXSER9TUEkPA== 

有=,且有0,判断是base64编码

W^7?+dsi@bUwJTfUt=_GUvgz(F)?{xWo~0IWHD}MA$< 

有很多其他的符号,猜测base85编码,解码得到

flag{W0w_y0u_c4n_rea11y_enc0d1ng!}

[SWPUCTF 2021 新生赛]ez_rsa 

p = 1325465431
q = 152317153
e = 65537
计算出d,将d用MD5加密后包裹NSSCTF{}提交

这一题考RSA

关于RSA

RSA(Rivest-Shamir-Adleman)是一种非对称加密算法,通常用于加密和解密数据、数字签名和密钥交换。RSA算法基于两个大素数的乘积难以分解的数论问题,其安全性基于大整数分解的困难性。

RSA算法涉及三个主要步骤:密钥生成、加密和解密。

  1. 密钥生成
    • 选择两个不同的大素数 p 和 q。
    • 计算它们的乘积 n = p * q,这就是RSA的模数。
    • 计算欧拉函数 φ(n) = (p-1) * (q-1)。
    • 选择一个整数 e,1 < e < φ(n),且 e 与 φ(n) 互质。
    • 计算 e 的模反元素 d,即 d ≡ e^(-1) (mod φ(n))。
    • 公钥为 (n, e),私钥为 (n, d)。
  2. 加密
    • 对于要加密的消息 m,使用接收者的公钥 (n, e)。
    • 计算密文 c = m^e mod n。
    • 发送密文 c 给接收者。
  3. 解密
    • 接收者使用自己的私钥 (n, d)。
    • 计算明文 m = c^d mod n。
    • 得到原始消息 m。

好了,继续解题,使用代码解码一下

import gmpy2
p = 1325465431
q = 152317153
e = 65537

a = (p - 1) * (q - 1)
b = gmpy2.invert(e,a)

print(b)

43476042047970113

再使用MD5加密得到

NSSCTF{08bb8fb628da85923e5734a75ac19ffe}

 [LitCTF 2023]梦想是红色的

打开也是核心价值观解码

 

LitCTF{为之则易,不为则难}

[BJDCTF 2020]base?? 

打开后是这种,第一部分有64位,题目也提示了是base,所以推断是base64编码,写出来后为

JKLMNOxyUVzABCDEFGH789PQIabcdefghijklmWXYZ0123456RSTnopqrstuvw+/

并且,它重新定义了base64(就像原本的base64中0对应的是A,这儿0对应的是j)

它换了一下代码,我们写个base64的脚本,改一下就行了

c = "JKLMNOxyUVzABCDEFGH789PQIabcdefghijklmWXYZ0123456RSTnopqrstuvw+/="  # 自定义的 base64 字符集
text = "FlZNfnF6Qol6e9w17WwQQoGYBQCgIkGTa9w3IQKw"  # 待解码的文本

end = ""
# 将文本中的每个字符转换为其在自定义 base64 字符集中的索引,并将结果转换为二进制字符串拼接起来
for i in text:
    end += bin(c.find(i))[2:].zfill(6)

print(end)

x = ""
# 将拼接的二进制字符串每 8 位进行分割,转换为对应的 ASCII 字符,并拼接起来
for i in range(0, len(end), 8):
    ins = end[i:i+8]
    x += chr(int(ins, 2))

print(x)

运行后得到

BJD{D0_Y0u_kNoW_Th1s_b4se_map}

[SWPUCTF 2021 新生赛]traditional 

嗯。。。读懂了没

找一下八卦与二进制的对用关系

根据二进制数的规定:有,用1表示;无,用0表示。我们可以得出八卦各卦阳爻和阴爻的二进制数。下面我们写出八卦各卦阳爻的二进制数(即有阳爻为1,无阳爻为0):

坤:黑黑黑,卦符阴阴阴,二进制数为000

艮:黑黑白,卦符阴阴阳,二进制数为001

坎:黑白黑,卦符阴阳阴,二进制数为010

巽:黑黑白,卦符阴阳阳,二进制数为011

震:白黑黑,卦符阳阴阴,二进制数为100

离:白黑白,卦符阳阴阳,二进制数为101

兑:白白黑,卦符阳阳阴,二进制数为110

乾:白白白,卦符阳阳阳,二进制数为111

用这个来分别对应文本中的: 震坤艮 震艮震 坤巽坤 坤巽震 震巽兑 震艮震 震离艮 震离艮 

二进制:001000100 001100001 000110000 000110001 001110011 001100001 001101100 001101100

转换为十进制:68 97 48 49 115 97 108 108

再去找他对应的ASCII码:NSSCTF{Da01sall}

[LitCTF 2023]Hex?Hex!(初级)

打开后得到这个,在线工具就秒了

 4c69744354467b746169313131636f6f6c6c616161217d

HEX转字符 十六进制转字符 hex gb2312 gbk utf8 汉字内码转换 - The X 在线工具 

LitCTF{tai111coollaaa!} 

[SWPUCTF 2021 新生赛]crypto2 

打开后得到python文件,题目已经给出是共模攻击的题目

from gmpy2 import *
from Crypto.Util.number import *



flag  = '***************'

p = getPrime(512)
q = getPrime(512)
m1 = bytes_to_long(bytes(flag.encode()))


n = p*q
e1 = getPrime(32)
e2 = getPrime(32)
print()

flag1 = pow(m1,e1,n)
flag2 = pow(m1,e2,n)
print('flag1= '+str(flag1))
print('flag2= '+str(flag2))
print('e1= ' +str(e1))
print('e2= '+str(e2))
print('n= '+str(n))


#flag1= 100156221476910922393504870369139942732039899485715044553913743347065883159136513788649486841774544271396690778274591792200052614669235485675534653358596366535073802301361391007325520975043321423979924560272762579823233787671688669418622502663507796640233829689484044539829008058686075845762979657345727814280
#flag2= 86203582128388484129915298832227259690596162850520078142152482846864345432564143608324463705492416009896246993950991615005717737886323630334871790740288140033046061512799892371429864110237909925611745163785768204802056985016447086450491884472899152778839120484475953828199840871689380584162839244393022471075
#e1= 3247473589
#e2= 3698409173
#n= 103606706829811720151309965777670519601112877713318435398103278099344725459597221064867089950867125892545997503531556048610968847926307322033117328614701432100084574953706259773711412853364463950703468142791390129671097834871371125741564434710151190962389213898270025272913761067078391308880995594218009110313

 上共模攻击的脚本

from gmpy2 import *  # 导入 gmpy2 库,用于快速数学运算
from Cryptodome.Util.number import *  # 导入 Cryptodome 库,用于数字转换为字节流

# 第一个密文和第二个密文
c1 = 100156221476910922393504870369139942732039899485715044553913743347065883159136513788649486841774544271396690778274591792200052614669235485675534653358596366535073802301361391007325520975043321423979924560272762579823233787671688669418622502663507796640233829689484044539829008058686075845762979657345727814280
c2 = 86203582128388484129915298832227259690596162850520078142152482846864345432564143608324463705492416009896246993950991615005717737886323630334871790740288140033046061512799892371429864110237909925611745163785768204802056985016447086450491884472899152778839120484475953828199840871689380584162839244393022471075

# 第一个指数和第二个指数
e1 = 3247473589
e2 = 3698409173

# 模数
n = 103606706829811720151309965777670519601112877713318435398103278099344725459597221064867089950867125892545997503531556048610968847926307322033117328614701432100084574953706259773711412853364463950703468142791390129671097834871371125741564434710151190962389213898270025272913761067078391308880995594218009110313

# 计算 e1 和 e2 的模反元素
_, s1, s2 = gcdext(e1, e2)

# 输出 s1 和 s2
print(s1)
print(s2)

# 解密得到明文
m = powmod(c1, s1, n) * powmod(c2, s2, n) % n

# 将明文从长整型转换为字节流并打印出来
print(long_to_bytes(m))

得到

NSSCTF{xxxxx******xxxxx}

  • 7
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值