维吉尼亚密码 ctf

"本文介绍了维吉尼亚密码的加密原理和步骤,并提供了一个具体实例,展示了如何使用密钥‘yanzi’对密文进行逆向解密。通过脚本解析,最终得出解密后的明文,即挑战答案‘BJD{yanzi_jiushige_shabi}

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

维吉尼亚密码

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}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值