gpt4 book ai didi

python - Pycrypto - 在 Linux 上加密/在 Windows 上解密

转载 作者:太空宇宙 更新时间:2023-11-04 03:57:29 27 4
gpt4 key购买 nike

我有一个正在使用的跨平台加密/解密类。我在服务器和客户端上使用相同的类。我在 Linux 服务器上加密文件,然后在 Linux 或 Windows 客户端上解密。我在 Linux 上解密时没有问题,但当我将文件传输到 Windows 并尝试解密时,出现以下异常:

ValueError:输入字符串长度必须是 16 的倍数

我的第一个想法是,这是由不同的文件系统以及用于创建填充的任何字符引起的。这是我的类(class)代码:

class FileSec:
def __init__(self):

# File chunk size
self.chunk_size = 64*1024

# Encrypt file with OpenSSL
def encrypt(self, infile, outfile, key):
if not infile or not os.path.isfile(infile):
return False
if not outfile or os.path.isfile(outfile):
return False
if not key:
return False

# Encrypt the file
iv = ''.join(chr(random.randint(0, 0xFF)) for i in range(16))
encryptor = AES.new(key, AES.MODE_CBC, iv)
filesize = os.path.getsize(infile)
with open(infile, 'rb') as ifh:
with open(outfile, 'wb') as ofh:
ofh.write(struct.pack('<Q', filesize))
ofh.write(iv)
while True:
chunk = ifh.read(self.chunk_size)
if len(chunk) == 0:
break
elif len(chunk) % 16 != 0:
chunk += ' ' * (16 - len(chunk) % 16)
ofh.write(encryptor.encrypt(chunk))
return True

# Decrypt file with OpenSSL
def decrypt(self, infile, outfile, key):
if not infile or not os.path.isfile(infile):
return False
if not outfile or os.path.isfile(outfile):
return False
if not key:
return False

# Decrypt the file
with open(infile, 'rb') as ifh:
origsize = struct.unpack('<Q', ifh.read(struct.calcsize('Q')))[0]
iv = ifh.read(16)
decryptor = AES.new(key, AES.MODE_CBC, iv)
with open(outfile, 'wb') as ofh:
while True:
chunk = ifh.read(self.chunk_size)
if len(chunk) == 0:
break
ofh.write(decryptor.decrypt(chunk))
ofh.truncate(origsize)
return True

http://pastebin.com/Dvf6nUxH

我正在使用改编自此处的代码:http://eli.thegreenplace.net/2010/06/25/aes-encryption-of-files-in-python-with-pycrypto/

有人对如何修改此类以跨平台工作有任何建议吗?

最佳答案

myfile.read(x) 读取任意数量最多 x 字节;不保证返回所有x

请注意,它总是至少返回一个,直到文件为空,因此可以将其包装在循环中,然后连接返回的字符串。

关于python - Pycrypto - 在 Linux 上加密/在 Windows 上解密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24204802/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com