【问题标题】:AES-128 symmetric key cipher.using python [closed]AES-128 对称密钥密码。使用 python [关闭]
【发布时间】:2020-11-16 11:19:14
【问题描述】:

我试图通过暴力破解剩余的 4 个字符来找到密钥的剩余部分。然后我们使用每个密钥解密,并检查解密后的消息是否在开头有“Salam”。

from Cryptodome.Cipher import AES
def revpad(s):
        """
        This function is to remove padding.

        parameters:
                s:str
                                string to be reverse padded

        """

        k=ord(s[-1])
        temp=0                                          #temporary variable to check padding
        for i in range (1,k):                           #for loop to check padding
                if(s[-i]!=s[-1]):                       #comparision of bytes with the last Byte
                        temp=1

        if(temp==0):
                return (s[:-k])                         #Reverse padded string
        else:
                return ("Wrong padding")



def decrypt(ct,key):
        """
        This function is for decrypting ciphertext in ECB mode

        parameters:
                ct: str
                                ciphertext to be decrypted
                key: str
                                key for ECB mode encryption whose lenght is always a multiple of 16 in this case
        """

        plaintxt=AES.new(key,AES.MODE_ECB)
        pt=plaintxt.decrypt(ct)

        return revpad(pt)                                  #After decrypting padding should be removed

if __name__ == "__main__":
    ciphertext = open("ciphertext2.dat" , "rb").read()
    partial_key = open("partial-key.dat" , "rb").read()
    for i in range(256):
        for j in range(256):
            for k in range(256):
                for l in range(256):
                    remaining_key = chr(i)+chr(j)+chr(k)+chr(l)
                    # print(type(remaining_key))

                    key = partial_key + remaining_key
                    decrypted_text = decrypt(ciphertext , key)
                    if decrypted_text[:5] == "Salam":
                        print(decrypted_text)

我无法从 partial_key 读取我收到此错误:

TypeError: can't concat str to bytes

【问题讨论】:

  • 请阅读有关提供问题的最小示例。这可以在两行代码中复制! range 在它的第一个参数中不接受字符串。

标签: python python-3.x pycrypto


【解决方案1】:

您似乎错误地使用了range 函数。该函数返回一个生成器,其中包含两个整数之间的值,并带有一个可选参数来更改步长

示例

range(10)  # numbers between 0 and 9
range(1, 10)  # numbers between 1 and 9
range(1, 10, 2) # numbers between 1 and 9, but skipping every second number [1, 3, 5, 7, 9]
range(10, 0, -1) # numbers between 10 and 1, counting backwards

你想要做的是循环一个字符串,为此你不需要 range 函数。要重复一个字符串,只需将其乘以重复次数即可

for i in '0123456789abcdef'*2:
   <insert code here>

【讨论】:

  • 现在代码正在运行,但没有输出。
  • 好吧,我不知道你的输入文件是什么样的,也许decrypted_text [:5] == 'Salam' 的说法永远不会正确
  • Salam 是密文文件中的加密字。Ciphertext2 文件中包含一个语句并且这个语句以 salam 开头
  • 对不起,我不知道,但这与您使用范围函数无关。如果您需要进一步的帮助,您需要更具体地说明您遇到的问题
猜你喜欢
  • 2011-09-26
  • 1970-01-01
  • 2016-05-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-09
  • 2015-03-13
相关资源
最近更新 更多