Python 如何从文件中解码编码为base64的行?

Python 如何从文件中解码编码为base64的行?,python,base64,Python,Base64,我需要解码文件中的行 以下是我目前的代码: def decode(self) -> list: """ Decode file with key. For correct answer you have to convert file lines from base64 to utf-8. To decode one line you have to take a UNICODE va

我需要解码文件中的行

以下是我目前的代码:

    def decode(self) -> list:
        """
        Decode file with key.

        For correct answer you have to convert file lines from base64 to utf-8.

        To decode one line you have to take a UNICODE value of a letter, subtract cipher step and take mod of 255.
        After that you have to convert that number back to a character.
        Example: key = 'test', decoded_data = "+%'"
        '+' -> (43 - 448) % 255 -> 'i' -> ... -> 'ice'

        :return: List of decoded lines
        """
        decoded_lines1 = []
        decoded_lines = []
        lines = self.read_code_from_file()
        for line in lines:
            decoded_lines.append(base64.b64decode(line).decode())
        for decoded_line in decoded_lines:
            for letter in decoded_line:
                decoded_lines1.append(chr((ord(letter) - sum([ord(i) for i in self.key])) % 255))
        return decoded_lines1

解码线路:

[')-.7)-\x06\x06AOO', '-57)-0\x06\x06JASJAOOASJ', ')07)2\x06\x06AJSAJAJOAJJAAO',...]

出于某种原因,我的输出将所有字母单独显示,下面输出的一小部分相当于解码后解码的_行的第一个列表元素 我的输出:

['-', '1', '2', ';', '-', '1', '\n', '\n', 'E', 'S', 'S', ...]

预期产出:

['-12;-1\n\nESS', ...]


有没有办法用逗号分隔行而不是用逗号分隔每个字母?非硬编码密钥等于1016。

问题在于,在执行此操作时,您会将每个字符逐个附加到解码的\u行1

.append(chr((ord(letter) - sum([ord(i) for i in self.key])) % 255))
相反,您希望对解码的_行中的每个字符执行此操作,从所有解码的字符中生成一个字符串,然后将该字符串附加到解码的_行1

但您可以通过将for line in line和for decoded_line in decoded_line循环组合起来,进一步简化代码:


问题是,在执行此操作时,您会将每个字符逐个附加到解码的_行1

.append(chr((ord(letter) - sum([ord(i) for i in self.key])) % 255))
相反,您希望对解码的_行中的每个字符执行此操作,从所有解码的字符中生成一个字符串,然后将该字符串附加到解码的_行1

但您可以通过将for line in line和for decoded_line in decoded_line循环组合起来,进一步简化代码:


问题在于以下代码:

for decoded_line in decoded_lines:
    for letter in decoded_line:
        decoded_lines1.append(chr((ord(letter) - sum([ord(i) for i in self.key])) % 255))
在这里,您将一个字母一个字母地添加到列表中,同时希望将解码后的行添加到列表中

for decoded_line in decoded_lines:
            temp=""
            for letter in decoded_line:
                temp=temp+chr((ord(letter) - sum([ord(i) for i in self.key])) % 255)
            decoded_lines1.append(temp)
因此,我将解码后的字母存储到一个字符串中,然后将其附加到列表中

for decoded_line in decoded_lines:
            temp=""
            for letter in decoded_line:
                temp=temp+chr((ord(letter) - sum([ord(i) for i in self.key])) % 255)
            decoded_lines1.append(temp)
最终代码如下所示:

def decode(self) -> list:
        """
        Decode file with key.

        For correct answer you have to convert file lines from base64 to utf-8.

        To decode one line you have to take a UNICODE value of a letter, subtract cipher step and take mod of 255.
        After that you have to convert that number back to a character.
        Example: key = 'test', decoded_data = "+%'"
        '+' -> (43 - 448) % 255 -> 'i' -> ... -> 'ice'

        :return: List of decoded lines
        """
        decoded_lines1 = []
        decoded_lines = []            
        lines = self.read_code_from_file()
        for line in lines:
            decoded_lines.append(base64.b64decode(line).decode())
        for decoded_line in decoded_lines:
            temp=""
            for letter in decoded_line:
                temp=temp+chr((ord(letter) - sum([ord(i) for i in self.key])) % 255)
            decoded_lines1.append(temp)                
        return decoded_lines1

问题在于以下代码:

for decoded_line in decoded_lines:
    for letter in decoded_line:
        decoded_lines1.append(chr((ord(letter) - sum([ord(i) for i in self.key])) % 255))
在这里,您将一个字母一个字母地添加到列表中,同时希望将解码后的行添加到列表中

for decoded_line in decoded_lines:
            temp=""
            for letter in decoded_line:
                temp=temp+chr((ord(letter) - sum([ord(i) for i in self.key])) % 255)
            decoded_lines1.append(temp)
因此,我将解码后的字母存储到一个字符串中,然后将其附加到列表中

for decoded_line in decoded_lines:
            temp=""
            for letter in decoded_line:
                temp=temp+chr((ord(letter) - sum([ord(i) for i in self.key])) % 255)
            decoded_lines1.append(temp)
最终代码如下所示:

def decode(self) -> list:
        """
        Decode file with key.

        For correct answer you have to convert file lines from base64 to utf-8.

        To decode one line you have to take a UNICODE value of a letter, subtract cipher step and take mod of 255.
        After that you have to convert that number back to a character.
        Example: key = 'test', decoded_data = "+%'"
        '+' -> (43 - 448) % 255 -> 'i' -> ... -> 'ice'

        :return: List of decoded lines
        """
        decoded_lines1 = []
        decoded_lines = []            
        lines = self.read_code_from_file()
        for line in lines:
            decoded_lines.append(base64.b64decode(line).decode())
        for decoded_line in decoded_lines:
            temp=""
            for letter in decoded_line:
                temp=temp+chr((ord(letter) - sum([ord(i) for i in self.key])) % 255)
            decoded_lines1.append(temp)                
        return decoded_lines1

你一行只有一个单词吗?这是一句话吗?它由多个单词组成,第二个循环应该是单词,第三个循环应该是字母。代码应该是这样的

def decode(self) -> list:
        """
        Decode file with key.

        For correct answer you have to convert file lines from base64 to utf-8.

        To decode one line you have to take a UNICODE value of a letter, subtract cipher step and take mod of 255.
        After that you have to convert that number back to a character.
        Example: key = 'test', decoded_data = "+%'"
        '+' -> (43 - 448) % 255 -> 'i' -> ... -> 'ice'

        :return: List of decoded lines
        """
        decoded_lines1 = []
        decoded_lines = []
        lines = self.read_code_from_file()
        for line in lines:
            decoded_lines.append(base64.b64decode(line).decode())
        for decoded_line in decoded_lines:
            for word in decoded_line.split():
                docoded_word=''
                for letter in word:
                    docoded_word+=(chr((ord(letter) - sum([ord(i) for i in self.key])) % 255))
                decoded_lines1.append(docoded_word)
        return (decoded_lines1)

你一行只有一个单词吗?这是一句话吗?它由多个单词组成,第二个循环应该是单词,第三个循环应该是字母。代码应该是这样的

def decode(self) -> list:
        """
        Decode file with key.

        For correct answer you have to convert file lines from base64 to utf-8.

        To decode one line you have to take a UNICODE value of a letter, subtract cipher step and take mod of 255.
        After that you have to convert that number back to a character.
        Example: key = 'test', decoded_data = "+%'"
        '+' -> (43 - 448) % 255 -> 'i' -> ... -> 'ice'

        :return: List of decoded lines
        """
        decoded_lines1 = []
        decoded_lines = []
        lines = self.read_code_from_file()
        for line in lines:
            decoded_lines.append(base64.b64decode(line).decode())
        for decoded_line in decoded_lines:
            for word in decoded_line.split():
                docoded_word=''
                for letter in word:
                    docoded_word+=(chr((ord(letter) - sum([ord(i) for i in self.key])) % 255))
                decoded_lines1.append(docoded_word)
        return (decoded_lines1)

类似于.joindecoded_lines1的内容可能会有所帮助,但您需要先细分为几行。感谢您向正确的方向推进,我仍然不清楚如何将输出细分为几行,由于分隔符都是相同的,且行长度不同。类似于.joindecoded_lines1的内容可能会有所帮助,但您需要先细分为行。感谢您将我的输出细分为正确的方向,我仍然不清楚如何将我的输出细分为行,因为分隔符都是一样的,线的长度也不一样。谢谢你详细解释我做错了什么!谢谢你详细解释我做错了什么!