A python xxxFile like ( ie GzipFile, BZ2File, ...) for manipulating AES encrypted files.
Project description
AesFile
A python xxxFile like (ie TarFile, GzipFile, BZ2File, pyzstd.ZstdFile, ...) for encrypting files with cryptography AES.
This project is part of the CofferFile : https://github.com/bibi21000/CofferFile
If you're looking for a more powerfull storage for your sensible datas, look at PyCoffer : https://github.com/bibi21000/PyCoffer.
Install
pip install aesfile
Create your encryption key
from Crypto.Random import get_random_bytes
key = get_random_bytes(16)
and store it in a safe place (disk, database, ...).
This key is essential to encrypt and decrypt data. Losing this key means losing the data.
"open" your encrypted files like normal files
Text files :
import aesfile
with aesfile.open('test.txc', mode='wt', aes_key=key, encoding="utf-8") as ff:
ff.write(data)
with aesfile.open('test.txc', "rt", aes_key=key, encoding="utf-8") as ff:
data = ff.read()
with aesfile.open('test.txc', mode='wt', aes_key=key, encoding="utf-8") as ff:
ff.writelines(data)
with aesfile.open('test.txc', "rt", aes_key=key, encoding="utf-8") as ff:
data = ff.readlines()
Binary files :
import aesfile
with aesfile.open('test.dac', mode='wb', aes_key=key) as ff:
ff.write(data)
with aesfile.open('test.dac', "rb", aes_key=key) as ff:
data = ff.read()
Or compress and crypt them with pyzstd
pip install aesfile[zstd]
from aesfile.zstd import AesFile
with AesFile('test.dac', mode='wb', aes_key=key) as ff:
ff.write(data)
with AesFile('test.dac', mode='rb', aes_key=key) as ff:
data = ff.read()
And chain it to tar and bz2
class TarBz2AesFile(tarfile.TarFile):
def __init__(self, name, mode='r', aes_key=None, chunk_size=aesfile.CHUNK_SIZE, **kwargs):
compresslevel = kwargs.pop('compresslevel', 9)
self.fernet_file = aesfile.AesFile(name, mode,
aes_key=aes_key, chunk_size=chunk_size, **kwargs)
try:
self.bz2_file = bz2.BZ2File(self.fernet_file, mode=mode,
compresslevel=compresslevel, **kwargs)
try:
super().__init__(fileobj=self.bz2_file, mode=mode, **kwargs)
except Exception:
self.bz2_file.close()
raise
except Exception:
self.fernet_file.close()
raise
def close(self):
try:
super().close()
finally:
try:
if self.fernet_file is not None:
self.bz2_file.close()
finally:
if self.fernet_file is not None:
self.fernet_file.close()
with TarBz2AesFile('test.zsc', mode='wb', aes_key=key) as ff:
ff.add(dataf1, 'file1.out')
ff.add(dataf2, 'file2.out')
with TarBz2AesFile('test.zsc', mode='rb', aes_key=key) as ff:
fdata1 = ff.extractfile('file1.out')
fdata2 = ff.extractfile('file2.out')
Encrypt / decrypt existing files
Encrypt :
import aesfile
with open(source, 'rb') as fin, aesfile.open(destination, mode='wb', aes_key=key) as fout:
while True:
data = fin.read(7777)
if not data:
break
fout.write(data)
Decrypt :
import aesfile
with aesfile.open(source, mode='rb', aes_key=key) as fin, open(destination, 'wb') as fout :
while True:
data = fin.read(8888)
if not data:
break
fout.write(data)
Or
Encrypt :
import aesfile.zstd
with open(source, 'rb') as fin, aesfile.zstd.open(destination, mode='wb', aes_key=key) as fout:
while True:
data = fin.read(7777)
if not data:
break
fout.write(data)
Decrypt :
import aesfile.zstd
with aesfile.zstd.open(source, mode='rb', aes_key=key) as fin, open(destination, 'wb') as fout :
while True:
data = fin.read(8888)
if not data:
break
fout.write(data)
Look at documentation : https://bibi21000.github.io/AesFile/
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file aesfile-0.0.1.tar.gz.
File metadata
- Download URL: aesfile-0.0.1.tar.gz
- Upload date:
- Size: 7.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.10.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4cb6c362aea538a84e28420463bc1b58a550244ae300ec362ca1f3f5a3d0d4f4
|
|
| MD5 |
07e4738d03c9bcbbd65c0ebd0cd7c853
|
|
| BLAKE2b-256 |
29806cb0774c41a3085bca697d0c54b54edb5b2c7f35f63b592242e1e8be14b4
|
File details
Details for the file aesfile-0.0.1-py3-none-any.whl.
File metadata
- Download URL: aesfile-0.0.1-py3-none-any.whl
- Upload date:
- Size: 8.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.10.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a1528c1cde85a8a0b33c6ccdefc8ad7ad8f10419030abb67a6494d404757d2d6
|
|
| MD5 |
32275dc311cb9811001da9ed1244303d
|
|
| BLAKE2b-256 |
866160c0753548cb2ddb9258d01b414b78b45e33bfd37b1a09515d43f51658c7
|