buuctf传统知识+古典密码、变异凯撒、RSA ROLL

文章介绍了几种古典密码学方法,包括基于干支的数字转换,栅栏密码和变异凯撒密码的解密过程,以及RSA加密算法的实现。解密过程中涉及到ASCII值的使用和在线工具的支持。还提到了Rabbit加密的特点和密钥相关知识。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

传统知识+古典密码

题目信息

首先考虑 辛卯,癸巳,丙戌,辛未,庚辰,癸酉,己卯,癸巳。对应的是什么。在干支里它们分别对应
28 30 23 8 17 10 16 30

 而且在最后有“+甲子”。“甲子”对应的是60,所以每个数都需要加上60,也就是
88 90 83 68 77 70 76 90

对应的ASCII的值为
XZSDMFLZ
栅栏密码为2 凯撒密码为5 对应解密就可以得到flag中的值

解密网址:CTF在线工具-CTF工具|CTF编码|CTF密码学|CTF加解密|程序员工具|在线编解码CTFcode为CTF比赛人员、程序员提供20多种常用编码,如base家族编码、莫尔斯电码,20多种古典密码学,如仿射密码、栅栏密码、培根密码等,以及10多种杂项工具,如XXencode、UUencode、核心价值观编码等。http://www.hiencode.com/?tdsourcetag=s_pcqq_aiomsg

 关于栅栏密码

栅栏密码(Rail Fence Cipher)是一种比较简单的置换密码,它的加解密原理是:. 加密时,将要加密的明文按照一定的规则在栅栏之间上下交错书写。

比如hello!按照2栏进行加密是:
h l o
e l !

加密的结果是按行输出:hloel!

对应的解密过程呢?当然是也是将其按照行排列好,然后按列输出就可以了
h l o
e l !

解密结果:hello!

所谓的几栏栅栏加密,就是在加密的时候选择的行数不同

变异凯撒

题目信息

 观察a→f需要移动5位,f→l需要移动6位,以此类推
解密脚本如下:
 

#变异凯撒解密脚本
def Cesear(encrypt_str):
    descrypt_str = ''
    step = 5  #初始化步数为5

    for i in range(len(encrypt_str)):
        c = ord(encrypt_str[i])
        if 65<=c<=90:
            c+=step #加减取决于是后移还是移
        elif 97<=c<=120:
            c+=step
        else:#这里为了方便理清逻辑所以多此一举用了三个判断条件 其实只需要使用c+=step就可以解题了
            c+=step
        step+=1#步数自增
        if step>26:
            step = step%26
        descrypt_str+=chr(c)

    return descrypt_str
encrypt_str="afZ_r9VYfScOeO_UL^RWUc"
decrypt_str = Cesear(encrypt_str)
print(decrypt_str)

 关于Rabbit

特点:Rabbit加密开头部分通常为U2FsdGVkX1(AES、DES、RC4、Rabbit、Triple DES、3DES 这些算法都可以引入密钥,密文特征与Base64类似,明显区别是秘文里​​+​​​比较多,并且经常有/)

RSA ROLL

题目信息

 根据题目已经知道n、e 使用在线分解网站分解得到p和q

分解网站:factordb.com

 既然已经得到了e,p,q那么就能够得到d

得到d之后使用pow(c,d,n)就能得到密文,那么什么是c呢?c就是下面的一组数据,可以使用数组进行暂存;对每个c进行解密后存到一个数组元素里,然后再输出,解密脚本如下:
 

import gmpy2
def rsa():
    p = 18443
    q = 49891
    n = p*q
    e = 19
    d = gmpy2.invert(e,(p-1)*(q-1))
    c = [704796792,752211152,274704164,18414022,368270835,483295235,263072905,459788476,483295235,459788476,663551792,475206804,459788476,428313374,475206804,459788476,425392137,704796792,458265677,341524652,483295235,534149509,425392137,428313374,425392137,341524652,458265677,263072905,483295235,828509797,341524652,425392137,475206804,428313374,483295235,475206804,459788476,306220148]
    m = []
    for i in c:
        m.append(pow(i,d,n))
    for i in m:
        print(chr(i))
print(rsa())


 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值