如何从文件中解码编码为 base64 的行?
How to decode lines encoded as base64 from file?
我需要解码文件中的行。
到目前为止,这是我的代码:
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
decoded_lines:
[')-.7)-\x06\x06AOO', '-57)-0\x06\x06JASJAOOASJ', ')07)2\x06\x06AJSAJAJOAJJAAO',...]
由于某种原因,我的输出中所有的字母都是单独的,下面输出的一小部分在解码后等于 decoded_lines 的第一个列表元素
我的输出:
['-', '1', '2', ';', '-', '1', '\n', '\n', 'E', 'S', 'S', ...]
预期输出:
['-12;-1\n\nESS', ...]
有什么方法可以让每行用逗号分隔而不是每个字母都用逗号分隔?非硬编码密钥等于 1016.
问题是当你做
时,你将每个字符 one-by-one 附加到 decoded_lines1
.append(chr((ord(letter) - sum([ord(i) for i in self.key])) % 255))
相反,您想对 decoded_line
中的每个字符执行此操作,从所有已解码字符中生成 一个字符串,然后 将 那个字符串 附加到 decoded_lines1
.
for decoded_line in decoded_lines:
new_line = []
for letter in decoded_line:
new_line.append(chr((ord(letter) - sum([ord(i) for i in self.key])) % 255))
decoded_lines1.append("".join(new_line))
但是您可以通过组合 for line in lines
和 for decoded_line in decoded_lines
循环进一步简化您的代码:
def decode(self):
decoded_lines = []
lines = self.read_code_from_file()
for line in lines:
decoded_line = base64.b64decode(line).decode()
new_line = []
for letter in decoded_line:
new_line.append(chr((ord(letter) - sum([ord(i) for i in self.key])) % 255))
decoded_lines.append("".join(new_line))
return decoded_lines
问题出在下面的代码中:
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)
最终代码如下:
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 letter in decoded_line:
decoded_lines1.append(chr((ord(letter) - sum([ord(i) for i in self.key])) % 255))
return decoded_lines1
decoded_lines:
[')-.7)-\x06\x06AOO', '-57)-0\x06\x06JASJAOOASJ', ')07)2\x06\x06AJSAJAJOAJJAAO',...]
由于某种原因,我的输出中所有的字母都是单独的,下面输出的一小部分在解码后等于 decoded_lines 的第一个列表元素 我的输出:
['-', '1', '2', ';', '-', '1', '\n', '\n', 'E', 'S', 'S', ...]
预期输出:
['-12;-1\n\nESS', ...]
有什么方法可以让每行用逗号分隔而不是每个字母都用逗号分隔?非硬编码密钥等于 1016.
问题是当你做
时,你将每个字符 one-by-one 附加到decoded_lines1
.append(chr((ord(letter) - sum([ord(i) for i in self.key])) % 255))
相反,您想对 decoded_line
中的每个字符执行此操作,从所有已解码字符中生成 一个字符串,然后 将 那个字符串 附加到 decoded_lines1
.
for decoded_line in decoded_lines:
new_line = []
for letter in decoded_line:
new_line.append(chr((ord(letter) - sum([ord(i) for i in self.key])) % 255))
decoded_lines1.append("".join(new_line))
但是您可以通过组合 for line in lines
和 for decoded_line in decoded_lines
循环进一步简化您的代码:
def decode(self):
decoded_lines = []
lines = self.read_code_from_file()
for line in lines:
decoded_line = base64.b64decode(line).decode()
new_line = []
for letter in decoded_line:
new_line.append(chr((ord(letter) - sum([ord(i) for i in self.key])) % 255))
decoded_lines.append("".join(new_line))
return decoded_lines
问题出在下面的代码中:
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)
最终代码如下:
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)