【发布时间】:2014-03-26 16:25:35
【问题描述】:
我正在尝试编写一个针对 DES 的蛮力攻击的程序,密钥是一个仅由十进制数字组成的 8 个字符的字符串,例如 (12345678)。
所以我需要一些帮助来编写一个程序,我可以将测试密钥设置为 (00000000) 并开始逐步循环 (00000001)、(00000002) 一直到 (99999999) 并且每次都尝试密钥。
我已经完成了 DES 程序,现在我的大脑被这部分卡住了。
更新:非常感谢 Hyperboreus 提供密钥生成器功能,但是当我在我的程序中使用它时,我收到错误消息
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xbf in position 1: invalid start byte
对于任何大于 (00000002) 的键
这是我的代码
from Crypto.Cipher import DES
import os
import base64
print ("key size is fixed at 16 Bytes including parities (56 bits effective)")
size = 16
key = '00000002'
cipher = DES.new(key)
BS = 8
def getMode():
while True:
mode = input('Do you wish to Encrypt "e", Decrypt "d" or Brute force "b" a message?\n')
if mode in 'e d b'.split():
return mode
else:
print('Enter either "e" for encrypt,"d" for decrypt, or "b" for brute force.\n')
def encrypt(text):
length = len(plaintext)
pad = lambda s: s + (BS - len(s) % BS) * ('~')
paddedtext = pad(plaintext)
encrypted = DES.new(key, DES.MODE_ECB)
ciphertext = base64.b64encode(encrypted.encrypt(paddedtext)).decode("utf-8")
return ciphertext
def decrypt(text):
decrypted = DES.new(key, DES.MODE_ECB)
paddedtext = decrypted.decrypt(base64.b64decode(cipher)).decode("utf-8")
l = paddedtext.count ('~')
return paddedtext[:len(paddedtext)-l]
def brute(text):
text2 = input("enter a part of the plain text: ")
def testkeys ():
for i in range (100000000):
yield '{:08d}'.format (i)
for testkey in testkeys ():
testkey = format (testkey)
decrypted = DES.new(testkey, DES.MODE_ECB)
paddedtext = decrypted.decrypt(base64.b64decode(cipher)).decode("utf-8")
if paddedtext.find(text2) != -1:
print ("the key is ",testkey)
l = paddedtext.count ('~')
return paddedtext[:len(paddedtext)-l]
break
mode = getMode()
print ("key is:", key)
if mode[0] == 'e':
plaintext = input("Enter the plaintext: ")
encrypted = encrypt(plaintext)
print ("encrypted:\n", encrypted)
elif mode [0] == 'd':
cipher = input("Enter the ciphertext: ")
decrypted = decrypt(cipher)
print ("decrypted:\n", decrypted)
else:
cipher = input("Enter the ciphertext: ")
brute = brute(cipher)
print ("decrypted:\n", brute)
一旦我解决了这个问题,下一步就是将字母(大写和小写)合并到键中
【问题讨论】:
标签: python string generator sequence des