0x01 前言
攻防世界上的一道题,考查DES加密OFB模式下的弱密钥问题。题目名为easy_BlockCipher。
0x02 解题
题目给了一段代码和一个ciphertext的二进制加密文件,先看代码:
from Crypto.Cipher import DES
f = open('key.txt', 'r')
key_hex = f.readline()[:-1] # discard newline
f.close()
KEY = key_hex.decode("hex")
IV = '13245678'
a = DES.new(KEY, DES.MODE_OFB, IV)
f = open('plaintext', 'r')
plaintext = f.read()
f.close()
ciphertext = a.encrypt(plaintext)
f = open('ciphertext', 'w')
f.write(ciphertext)
f.close()
代码很简单,利用DES的OFB模式加密plaintext,给定了IV的值,为13245678,加密内容写进ciphertext,没有给KEY的值,但key是通过key.txt生成的十六进制值。
因此,已知IV,密文,只需要知道key的值就可以求出明文了。
简单看下DES加密,照搬《深入浅出密码学》里的笔记啦:
DES算法概述
DES是一种使用56位密钥对64位长分组进行加密的密码。DES是一种对称密码,加密和解密过程使用相同的密钥。DES也是一种