我目前正致力于加密/解密程序,它在文本文件上工作正常,但我在使用二进制文件时遇到问题。以下是问题的一个例子:
我们说我有一个PNG文件(文件A),当我在记事本中打开它时,它看起来像:
这两个文件实际上是相同的,除了文件B有一个奇怪的编码,将‰(文件A中的第一个字符)之类的unicode包机转换为\ x89,这不是我真正需要的。文件A中找到的任何换行也会变成文件B中的\ r \ n ...
我尝试了几种不同的方式编写文件B,但我认为问题是它像字符串一样返回
b'\x89PNG\r\n'b'\x1a...
解密后。有没有办法可以将所述字符串转换成有效的章程,如文件A所示?
我附加了写入文件的代码,可能是必要的......
text = ''
textFile = open(textFileName, 'rb')
for textLine in textFile:
text += str(textLine)
textFile.close()
ciphertext = text
numPassCounter = 0
for password in passwords:
ciphertext = fEncode(ciphertext, password, num_passwords[numPassCounter])
numPassCounter += 1
os.system("copy /y " + textFileName + " " + ciphertextFileName)
ciphertextFile = open(ciphertextFileName, 'wb')
ciphertextFile.write(bytes(ciphertext.encode()))
ciphertextFile.close()
if bool_chk_output:
plaintext_r = ''
plaintext_r_file = open(ciphertextFileName, 'r', encoding='utf-8')
for plaintext_r_line in plaintext_r_file:
plaintext_r += str(plaintext_r_line)
plaintext_r_file.close()
plaintext = plaintext_r
rNumPassCounter = 0
for rPassword in rPasswords:
plaintext = fDecode(plaintext, rPassword, rNumPasswords[rNumPassCounter])
rNumPassCounter += 1
os.system("copy /y " + textFileName + " " + plaintextFileName)
plaintextFile = open(plaintextFileName, 'wb')
plaintextFile.write(bytes(plaintext.encode()))
plaintextFile.close()
if text == plaintext:
print('Success!')
else:
print('Error! Plaintext does not match original text.')
为避免混淆:fEncode()和fDecode()都有3个参数:2个字符串和一个整数。