【问题标题】:how to change a string in python sequentially?如何按顺序更改python中的字符串?
【发布时间】: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


    【解决方案1】:

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

    def keys ():
        for i in range (100000000):
            yield '{:08d}'.format (i)
    
    for key in keys ():
        print ('Testing key {}.'.format (key) )
        #test the key
    

    【讨论】:

      猜你喜欢
      • 2019-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-28
      • 2014-11-30
      相关资源
      最近更新 更多