范闲获取到庆帝与神庙的往来信件,用AES进行破解

关注微信公众号 数据分析螺丝钉 免费领取价值万元的python/java/商业分析/数据结构与算法学习资料

在《庆余年2》中,范闲与庆帝和神庙之间的权谋斗争愈演愈烈。一次偶然的机会,范闲从庆帝的密室中获取到几封与神庙往来的密信。然而,这封信件被加密处理,内容为“Ciphertext: d1e92b9c2d1e9a0f3b0f1e2c9a4b9c7d”,无法直接读取什么意思。范闲与五竹叔一起看这封信的内容,怀疑是皇帝与神庙的秘密阴谋。五竹一看发现是128位,猜测是MD5加密或者AES,决定通过python进行尝试解密。但是MD5发现在这里没法解密,所以尝试用AES
在这里插入图片描述

AES算法简介

在这里插入图片描述

AES(Advanced Encryption Standard)是一种对称密钥加密算法,用于保护数据。它被广泛认为是高效且安全的加密标准。AES支持128位、192位和256位的密钥长度,常用于数据加密传输和存储。但是它主要是通过秘钥的传递进行加解密

AES算法的原理

AES算法包括以下几个主要步骤:
密钥扩展:生成一组密钥,称为轮密钥,用于各轮的加密和解密操作。
初始轮:将明文与初始轮密钥进行异或操作。
轮变换:进行若干次轮变换,每次轮变换包括以下四步:

  • 字节代替(SubBytes):使用S盒替换字节,通过非线性替换增强安全性。
  • 行移位(ShiftRows):对状态矩阵的行进行循环移位,增加混淆性。
  • 列混合(MixColumns):混合状态矩阵的列,通过线性变换进一步混淆数据。
  • 轮密钥加(AddRoundKey):将当前状态与轮密钥进行异或操作,增加复杂性。

最终轮:与轮变换类似,但不进行列混合操作,最终输出密文。

范闲的解密过程

庆帝安排了一个假范闲去马车上,这个信息马上检察院发现,范闲在想与信件的内容会不会有什么关联
在这里插入图片描述

范闲把从信件中截取的密文,并使用AES算法进行解密。详细思考了一下可能的秘钥,接着他老师的话点醒了他,知道庆帝可能想利用他引诱五竹,所以秘钥很可能是他的名字:
在这里插入图片描述
秘钥用 范闲的名字带入进行解密,并且他猜测,庆帝之前已经跟神庙有过勾结,可能也学会了现代的知识,比如拼音、英语和算法,所以他在解密的时候也大胆假设。

Ciphertext: d1e92b9c2d1e9a0f3b0f1e2c9a4b9c7d  # 密文内容

获取密钥:范闲通过蛛丝马迹,推测出庆帝可能使用的加密密钥。
解密操作:范闲使用推测出的密钥和加密消息进行解密操作。

from Cryptodome.Cipher import AES
from Cryptodome.Util.Padding import unpad
from Cryptodome.Random import get_random_bytes

def aes_decrypt(iv, ciphertext, key):
    try:
        # 创建AES解密对象
        cipher = AES.new(key, AES.MODE_CBC, iv=iv)
        # 解密并返回明文
        decrypted = unpad(cipher.decrypt(ciphertext), AES.block_size)
        return decrypted
    except Exception as e:
        return None

# 已知的密文和初始化向量(IV)
ciphertext = bytes.fromhex('d1e92b9c2d1e9a0f3b0f1e2c9a4b9c7d')
iv = bytes.fromhex('1a2b3c4d5e6f7g8h')

# 候选密钥列表
key_candidates = ['qingdi', 'wuzhu', 'qingshi', 'xiyin', 'fanxian', 'siguo']
# 将字符串编码为字节并填充或截断为16字节(128位)
keys = [key.encode('utf-8').ljust(16, b'\0')[:16] for key in key_candidates]

# 尝试用所有候选密钥进行解密
for key in keys:
    decrypted = aes_decrypt(iv, ciphertext, key)
    if decrypted:
        print(f'Key: {key.decode("utf-8")}, Decrypted: {decrypted.decode("utf-8")}')
        break
    else:
        print(f'Key: {key.decode("utf-8")}, Failed to decrypt.')

输出示例

Key: qingdi, Failed to decrypt.
Key: wuzhu, Failed to decrypt.
Key: qingshi, Failed to decrypt.
Key: xiyin, Failed to decrypt.
Key: fanxian, Decrypted: kill wuzhu
Key: siguo, Failed to decrypt.

通过AES加密算法,范闲成功解密了庆帝与神庙的往来信件,揭示了隐藏在密文背后的重要信息。
解密后的内容:

Decrypted message: kill wuzhu

这封信件详细说明了庆帝与神庙之间的秘密计划,给范闲提供了关键证据,接着他马上通知五竹有危险,然后五竹做了充分的准备,在大战神庙使者的时候轻松获胜。
在这里插入图片描述

结论

通过详细介绍AES加密算法的原理和实现过程,以及结合范闲破解庆帝与神庙往来信件的故事情节。范闲的成功解密,再次证明了科学技术在权谋斗争中的关键作用。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

数据分析螺丝钉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值