在Python

时间:2016-02-24 22:39:59

标签: python python-3.x byte

我正在尝试用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()?

1 个答案:

答案 0 :(得分:0)

这个问题是由于我使用print函数将字节打印到文件引起的。

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)

成功转移数据。