UNCTF2022 Crypto部分古典密码题总结

1 dddd-西南科技大学

110/01/0101/0/1101/0000100/0100/11110/111/110010/0/1111/10000/111/110010/1000/110/111/0/110010/00/00000/101/111/1/0000010

  以01构成,并且分隔长短不一,确实懂得都懂摩斯密码

2,caesar-西南科技大学

Caesar cipher凯撒密码为

我把表换成了base64的表

B6vAy{dhd_AOiZ_KiMyLYLUa_JlL/HY}

已知表为base64,flag格式是UNCTF.....,找张base64码表直接手搓\

3,今晚吃什么-金陵科技学院

10000  10000  10000  00000  10000  00000  10000  10000  10000  10000  00000  10000  00000  00000  10000  10000  00000  00000  00000  10000  00000  10000  10000  10000  10000  10000  00000  00000  10000  00000  10000  00000  10000  10000  10000  00000  10000  10000  10000  00000  10000  10000  00000  10000  00000  00000  10000  10000  00000  00000  10000  00000  00000  10000  10000

 培根密码,加密方法有2

第一种方式:
    A aaaaa B aaaab C aaaba D aaabb E aabaa F aabab G aabba H aabbb I abaaa J abaab
    K ababa L ababb M abbaa N abbab O abbba P abbbb Q baaaa R baaab S baaba T baabb
    U babaa V babab W babba X babbb Y bbaaa Z bbaab

    第二种方式
    a AAAAA   g AABBA    n ABBAA   t BAABA
    b AAAAB   h AABBB    o ABBAB   u-v BAABB
    c AAABA   i-j ABAAA  p ABBBA   w BABAA
    d AAABB   k ABAAB    q ABBBB   x BABAB
    e AABAA   l ABABA    r BAAAA   y BABBA
    f AABAB   m ABABB    s BAAAB   z BABBB

解密一次后,11101 01111 01001 10001 01111 10010 10111 01110 11010 01100 10011

再解密一次得到flag CRYPROISFUN

4,Multi table-西南科技大学

from string import ascii_uppercase
from random import randint,shuffle
from binascii import b2a_hex,a2b_hex

flag="UNCTF{}"
base_table=list(ascii_uppercase)
# shuffle(base_table)
print(base_table)

table={}
for i in range(26):
    table[i]=ascii_uppercase[i:]+ascii_uppercase[:i]

key=[]
for i in range(4):
    key.append(randint(0,25))
print(key)
c=''
x=0
for i in range(len(flag)):
    if flag[i] in ascii_uppercase:
        c+=table[key[x%4]][base_table.index(flag[i])]
        x+=1
    else:
        c+=flag[i]
print(c)



# ['J', 'X', 'I', 'S', 'E', 'C', 'R', 'Z', 'L', 'U', 'K', 'Q', 'Y', 'F', 'N', 'V', 'T', 'P', 'O', 'G', 'A', 'H', 'D', 'W', 'M', 'B']
# SDCGW{MPN_VHG_AXHU_GERA_SM_EZJNDBWN_UZHETD}

维吉尼亚密码

不过字母表以'J', 'X', 'I', 'S', 'E', 'C', 'R', 'Z', 'L', 'U', 'K', 'Q', 'Y', 'F', 'N', 'V', 'T', 'P', 'O', 'G', 'A', 'H', 'D', 'W', 'M', 'B'为26*26的。 根据FLAG 格式UNCTF应该能找到KEY ,或者通过爆破。

5,Single table-西南科技大学

ABCDEFGHIKLMNOPQRSTUVWXYZ
key="ABCD"
table=
[
    E,F,G,H,I,
    K,L,M,N,O,
    P,Q,R,S,T,
    U,V,W,X,Y,
    Z,A,B,C,D
]
明文=THE_CODE
整理为:TH EC OD EX
密文为:IS ZH TI UH
整理为:ISZ_HTIU

密文:ISZ_HTIUH
整理为:IS ZH TI UH
明文为:TH EC DO EX
整理为:THE_CODE

playfair密码

Playfair解密算法首先将密钥填写在一个5*5的矩阵中(去Q留Z),矩阵中其它未用到的字母按顺序填在矩阵剩余位置中,根据替换矩阵由密文得到明文。

对密文解密规则如下:

1 若c1 c2在同一行,对应明文p1 p2分别是紧靠c1 c2 左端的字母。其中最后一列被看做是第一列的左方。

2 若c1 c2在同一列,对应明文p1 p2分别是紧靠c1 c2 上方的字母。其中最后一行被看做是第一行的上方。

3 若c1 c2不在同一行,不在同一列,则p1 p2是由c1 c2确定的矩形的其他两角的字母。

其实就是反其道而行之。

写出5*5手搓。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值