[UTCTF2020]hill

博客围绕名为hill的题目展开,该题考察希尔加密。已知前6个字母为'utfag',可据此计算密钥矩阵。分析中说明了根据已知信息确定使用2*2的密钥矩阵,通过矩阵求逆得到K。解题时利用sagemath内置功能计算矩阵,最终求解出原文得到flag。

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

目录

1.题目

2.分析

3.解题

4.参考


1.题目


wznqca{d4uqop0fk_q1nwofDbzg_eu}

2.分析

题目名称为hill,hill在外文翻译是希尔,可以作为人名,题目考察希尔加密。希尔加密的密钥是一个矩阵,而这个矩阵的获取需要根据已知信息进行计算,我们根据经验猜测的前6个字母为'utfag',这点已知信息就足以帮助我们计算得到密钥矩阵。

我们先计算密钥矩阵,根据已知信息,我们知道:

[utflag]->[wznqca]
#即
[20, 19, 5, 11, 0, 6] ->[22, 25, 13, 16, 2, 0]

因为可以建立六个一阶方程,但是我们要求的又是n*n的矩阵,所以使用的密钥矩阵应该是2*2的矩阵。

在加密过程中:

K*M=C

所以我们在保证K,M,C均为方阵的后,就能够通过矩阵求逆得到K:

K=C*M^{-1}

求到K之后,再按照如下过程求解原文:

M= K^{-1}*C

3.解题

计算密钥矩阵,使用部分信息来解密钥矩阵,使用sagemath内置的矩阵计算功能来解题:

#please run in sagemath

C = Matrix( [[22, 13],[25, 16]])
M = Matrix( [[20, 5], [19, 11]])
K = C*M.inverse() % 26
print(K)

K_inv = K.inverse()%26
print(K_inv)


'''
K:
[ 1 22]
[11 13]

K_inv:
[13  6]
[ 3 21]
'''

得到了K矩阵后可以求解原文:

K_inv = Matrix([[13, 6],[ 3,21]])
s = 'duqopfkqnwofdbzgeu'
ans = ''
for i in range(0, len(s), 2):
    T = Matrix([[ord(s[i]) - 97], [ord(s[i + 1]) - 97]])#两个两个的解密密文
    R = K_inv * T%26
    ans += chr(R[0][0] + 97) + chr(R[1][0] + 97)
print(ans)

#dngeruscphertextqq

手工把下划线,数字补回去,注意T改大写,得到flag:

utflag{d4nger0us_c1pherText_qq}

4.参考

文章1

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值