如何在python中按顺序更改字符串?

如何在python中按顺序更改字符串?,python,string,generator,sequence,des,Python,String,Generator,Sequence,Des,我正试图编写一个针对DES的暴力攻击程序,其关键是一个由8个字符组成的字符串,仅由十进制数字组成,例如(12345678) 因此,我需要一些帮助来编写一个程序,在这个程序中,我可以将测试键设置为(00000000),并开始递增循环(00000001),(00000002),一直循环到(9999999),当然每次都要尝试该键 我已经完成了DES程序,现在我的大脑被这部分卡住了 更新:非常感谢密钥生成器功能,但是当我在程序中使用它时,我收到错误消息 UnicodeDecodeError:“utf-8

我正试图编写一个针对DES的暴力攻击程序,其关键是一个由8个字符组成的字符串,仅由十进制数字组成,例如(12345678)

因此,我需要一些帮助来编写一个程序,在这个程序中,我可以将测试键设置为(00000000),并开始递增循环(00000001),(00000002),一直循环到(9999999),当然每次都要尝试该键

我已经完成了DES程序,现在我的大脑被这部分卡住了

更新:非常感谢密钥生成器功能,但是当我在程序中使用它时,我收到错误消息

UnicodeDecodeError:“utf-8”编解码器无法解码位置1中的字节0xbf:无效的开始字节

对于大于(0000000 2)的任何密钥

这是我的密码

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)

一旦我解决了这个问题,下一步就是将字母表(大写和小写)合并到键中

字符串是不可变的,因此不能更改它们。但是您可以生成所有需要的字符串

def keys ():
    for i in range (100000000):
        yield '{:08d}'.format (i)

for key in keys ():
    print ('Testing key {}.'.format (key) )
    #test the key

字符串是不可变的,因此不能更改它们。但是您可以生成所有需要的字符串

def keys ():
    for i in range (100000000):
        yield '{:08d}'.format (i)

for key in keys ():
    print ('Testing key {}.'.format (key) )
    #test the key