我试图编写一个针对DES的暴力攻击程序,其关键是一个8个字符的字符串,仅由十进制数字组成,例如(12345678)。在
所以我需要一些帮助来编写一个程序,在这个程序中我可以将测试密钥设置为(00000000),并开始以递增方式循环(00000001),(00000002),直到(999999999)为止,当然每次都要尝试这个键。在
我已经完成了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)
一旦我解决了这个问题,下一步就是把字母表(大写和小写)合并到键中