Bootstrap

维吉尼亚密码 ctf

维吉尼亚密码

BUUCTF-Crypto-[BJDCTF 2nd]燕言燕语-y1ng

小燕子,穿花衣,年年春天来这里,我问燕子你为啥来,燕子说:

79616E7A69205A4A517B78696C7A765F6971737375686F635F73757A6A677D20
转字符串得 yanzi ZJQ{xilzv_iqssuhoc_suzjg}

  1. 原理
    维吉尼亚密码(又译维热纳尔密码)是使用一系列凯撒密码组成密码字母表的加密算法,属于多表密码的一种简单形式。

  2. 加密步骤
    ①当明文为ATTACKATDAWN
    ②选择某一关键词并重复而得到密钥,如关键词为LEMON时,密钥为:LEMONLEMONLE
    ③对于明文的第一个字母A,对应密钥的第一个字母L,于是使用表格中L行字母表进行加密,得到密文第一个字母L。类似地,明文第二个字母为T,在表格中使用对应的E行进行加密,得到密文第二个字母X。以此类推,可以得到:
    明文:ATTACKATDAWN
    密钥:LEMONLEMONLE
    密文:LXFOPVEFRNHR

  3. 分析
    yanzi 为密钥,使用脚本逆向解密。

  4. 脚本

s = 'ZJQ{xilzv_iqssuhoc_suzjg}'
key = 'yanzi'
flag = ''
k = 0
for i in s:
    if i >= "A" and i <= "Z" or i >= "a" and i <= "z":
        x = ord(i) - (ord(key[k%5]) - 97)
        if i >= "A" and i <= "Z" and x < 65:
            x += 26
        if i >= "a" and i <= "z" and x < 97:
            x += 26
        flag += chr(x)
        k += 1
    else:
        flag += i
print(flag)

5. 答案
BJD{yanzi_jiushige_shabi}

;