OTP(一次一密加密法)

简述一下OPT

OPT又叫一次一密加密方式

简单了解一下该加密方式:
$$
密文C = 密钥K \oplus 明文M
$$
显而易见,解密方式即是:
$$
明文M = 密钥K \oplus 密文C
$$
需要注意的是,密钥是一个和密文等长的二进制字符串

这里给出一道例题,来自LitCTF2023——隐晦的消息记录

题目:

1
2
3
4
5
出题人:6c73d5240a948c86981bc294814d
某不知名收件人:收到消息attack at dawn
出题人:xxxxxxxxxxxxxxxxxxxxxxxxxxxx
某不知名收件人:收到消息Monday or Thur
已知出题人和收件人手中的密钥相同,请解出出题人第二次发送的密文呢(16进制,字母小写,解得的结果记得要加上LitCTF{}哦。)

根据题目提示,知道这是OPT加密,了解一下原理之后就知道该加密方式是通过异或实现的

只要把密文和密钥进行异或就能得到明文

首先把 attack at dawn转成16进制,再和6c73d5240a948c86981bc294814d进行异或,即可得到密钥,因为两次密钥相同,所以把Monday or Thur和密钥异或,就是我们要的密文

1
2
3
4
5
6
7
8
9
10
11
12
13
14
ciphertext1 = 0x6c73d5240a948c86981bc294814d    #   attack at dawn转16进制后
plaintext1 = 0x61747461636b206174206461776e

key = ciphertext1 ^ plaintext1

# key = 0xd07a14569fface7ec3ba6f5f623

plaintext2 = 0x4d6f6e646179206f722054687572 # Monday or Thur转16进制后

ciphertext2 = key ^ plaintext2

print(hex(ciphertext2))

#NSSCTF{4068cf2108868c889e1bf29d8351}
-------------已经到底啦!-------------