通过Python 3进行Unicode文件转换

时间:2015-10-15 21:47:26

标签: python file python-3.x encryption unicode

我目前正致力于加密/解密程序,它在文本文件上工作正常,但我在使用二进制文件时遇到问题。以下是问题的一个例子:

我们说我有一个PNG文件(文件A),当我在记事本中打开它时,它看起来像:enter image description here

当我加密和解密时,我得到一个文件(文件B),如下所示:enter image description here

这两个文件实际上是相同的,除了文件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个字符串和一个整数。

0 个答案:

没有答案