在 Python 中写入和检索字节 to/from 的文件

Writing and retrieving bytes to/from a file in Python

我正在尝试在 Python 中编写一个加密程序,它获取一个包含文本的文件,通过加密方案运行它,并将加密的文本输出到一个文件。我还必须附加我稍后用于文件解密的 IV 和盐。

我有两个问题,第一:我将 IV 写入文件,然后是盐,然后是加密密钥,然后是密文。但是文件看起来像这样:

b'\xcc\xc0\x0bL\x85\x04\x11:8\xce\xd6H\x1d^\xf5U'b'\xd6!\xe6\xd2Y\x17\x7f;\xc3\xea
\xd2Wj\xc3Q\xed'b'+\x90\x87Z\xde\x87\x1c8\xfdDl_\x8f\x8e\xbc\x97&4\xc6\r\xfa\xe0
\x1b\x98\x949\xd2\x10\x13\xdfb@'b'\xb2\xd4\x96\xb7D^\xf08\xa0\xa3\xba\x95\x89\r\xc3h'

这不是我想要的,因为您仍然可以看到 b'xxx'b'yyy' 的符号,这不好,因为它提供了文件结构的线索。我怎样才能解决这个问题,以便能够在文件中写入几个 16 字节的密钥,然后写入任意字节数的密文。

我的第二个问题。当我尝试从加密文件中读取时,它显示为:

b"b'\xcc\xc0\x0bL\"

所以它就像读取 b'' 符号并将其包装在更多 b'' 符号中一样,这让我无法读取字节。

要写入文件,我使用如下打印语句:

with open('file.encr', 'w') as f:
    print(decrypt_iv, file=f, end="")
    print(salt, file=f, end="")
    print(key, file=f, end="")
    print(encrypt_iv, file=f, end="")
    print(ciphertext, file=f, end="")

我不知道这是否会导致问题,我应该使用 write() 吗?

这个问题是因为我使用打印函数打印字节到文件造成的。

with open('file.enc', 'wb') as f:
    f.write(iv)
    f.write(salt)
    f.write(key)

并且:

with open("file.enc", "rb") as f:
    iv = f.read(16)
    salt = f.read(16)
    key = f.read(32)

数据传输成功