希尔密码,云影密码 及例题

希尔密码

在这里插入图片描述

云影密码

在这里插入图片描述

题一

[HDCTF2023]–爬过小山去看云

题目描述:

密文:ymyvzjtxswwktetpyvpfmvcdgywktetpyvpfuedfnzdjsiujvpwktetpyvnzdjpfkjssvacdgywktetpyvnzdjqtincduedfpfkjssne
在山的那头,有3个人,4只鸟,19只羊,11朵云

题目分析:

  • 小山 --> hill --> 希尔密码
  • 直接使用在线网站解决即可,得到:
    在这里插入图片描述

yourpiniseightfourtwozeroeightfourtwoonezeroeighteightfourzerotwofourzeroeightfourzeroonezeroonetwofourx

  • 英文数字转化为中文数字:

842084210884024084010124

  • 只有 01428 便知是云影密码,可以手算,也可用代码解,这里就直接上代码了:
a="842084210884024084010124"
s=a.split('0')
l=''
print(s)
for i in s:
    sum=0
    for j in i:
        sum+= int(j)
    l += chr(sum+96)
print(l)
# notflag

得到flag{notflag}

题二

buu [UTCTF2020]hill 1

题目描述:

wznqca{d4uqop0fk_q1nwofDbzg_eu}

题目分析:

  • 题目名称提示了是希尔密码,但是并不知道密钥
  • 已知 wznqca 对应 utflag
  • 猜测 n = 2 (即密钥矩阵为二阶)
  • 密文对应26个数字得到:
22, 25, 13, 16,  2,  0,  3, 20, 16, 14, 15,  5, 10, 16, 13, 22, 14,  5,  3,  1, 25,  6,  4, 20
  • 密钥二阶的话得到密文序列:
22 13 2  3 16 15 10 13 14 3 25  4
25 16 0 20 14  5 16 22  5 1  6 20
  • 其中前六个密文矩阵A为:
w n c  3 16 15 10 13 14 3 25  4
z q a 20 14  5 16 22  5 1  6 20
  • 对应于明文:
u f a ...
t l g ...
  • 转为数字矩阵M:
20  5 0 ...
19 11 6 ...
  • 设密钥矩阵B为:
a b
c d

又BM = A
解方程即可
代码如下:

s='wznqcaduqopfkqnwofDbzgeu'
flag_pre='utflag'
def getit(a1,b1,c1,a2,b2,c2,a3,b3,c3):
    for i in range(26):
        for j in range(26):
            if (a1 * i + b1 * j) % 26 == c1 and (a2 * i + b2 * j) % 26 == c2 and (a3 * i+b3*j) % 26 == c3:
                print(i,j)
                return (i,j)

x1=getit(22,25,20,13,16,5,2,0,0)
x2=getit(22,25,19,13,16,11,2,0,6)
import string
flag=''
for i in range(0, len(s),2):
    flag+=string.ascii_letters[(x1[0]*string.ascii_letters.index(s[i])+x1[1]*string.ascii_letters.index(s[i+1]))%26]
    flag+=string.ascii_letters[(x2[0]*string.ascii_letters.index(s[i])+x2[1]*string.ascii_letters.index(s[i+1]))%26]
print(flag)
# utflagdngeruscphertextqq

得到:

utflagdngeruscphertextqq

把删除的数字和符号加上以及大小写转换过来即可得到flag:
utflag{d4nger0us_c1pherText_qq}

希尔密码参考:https://blog.csdn.net/m0_57291352/article/details/118829155

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值