ttCrypto
Утилита для шифрования и расшифровки данных в буфере, поточно или в файле.
Библиотека содержит функции и консольную утилиту для работы с файлами.
Установка
pip install ttcrypto
Использование в коде
Простое шифрование/расшифровка (AES-256-GCM)
from ttcrypto import aes
key = bytes.fromhex('00' * 32)
encrypted_bytes = aes.encrypt_gcm_plain(data, key)
decrypted_bytes = aes.decrypt_gcm_plain(encrypted_bytes, key)
Поточное шифрование по AES-256-GCM
from ttcrypto import encrypt_gcm_generator
enc = encrypt_gcm_generator(key) # инициализируем генератор
encrypted_bytes = enc.send(None) # генерируем nonce для сессии
encrypted_bytes += enc.send(b'123') # отправляем порцию данных (в цикле)
encrypted_bytes += enc.send(b'') # отправляем пустую строку для финализации
encrypted_bytes = next(enc) + encrypted_bytes # next вычисляет tag, ставим его в начало
# encrypted_bytes = tag(16) + nonce(12) + ciphertext
Поточная расшифровка по AES-256-GCM
from ttcrypto import decrypt_gcm_generator
dec = decrypt_gcm_generator(key) # инициализируем генератор
next(dec) # инициализируем ввод (всегда отвечает b'')
data = dec.send(encrypted_bytes) # отправляем порцию данных (в цикле) - не менее 29 байт
data += dec.send(b'') # отправляем b'' для финализации
# data - оригинальные расшифрованные данные
Консольная утилита
Шифрование/расшифровка файла (ключ задаётся 64 hex символами)
$ ttcrypto -ek 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f source.txt target.enc
$ ttcrypto -dk 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f source.enc target.txt
Шифрование/расшифровка всех файлов в директории
$ ttcrypto -ek 00..1f source_dir encrypted_files_dir
$ ttcrypto -dk 00..1f encrypted_files_dir origin_files_dir
Шифрование файлов в директории, подходящих по имени
$ ttcrypto -e -k 00..1f -n '*.txt' source_dir encrypted_files_dir
Модуль криптографии AES-256-GCM
Cодержит:
- функции шифрования/расшифровки байтов (с полной буферизацией),
- функции-генераторы для поточного шифрования/расшифровки (без полной буферизации)
- функции для работы с BufferedIOBase объектами (с интерфейсов файлов)
Сложность реализации поточной обработки при использовании GCM алгоритма заключается в том, что подпись (tag) вычисляется после обработки всех данных и как правило дописывается в конец файла. Но при расшифровке подпись нужна до обработки данных — а чтение файла с конца не всегда возможно. Поэтому решено записывать тег в начало контейнера, вместе с nonce:
tag(16) + nonce(12) + ciphertext
При работе с файловыми объектами в начало записывается 16 нулевых байт — чтобы зарезервировать место для подписи (tag). В конце шифрования, когда будет вычислен tag — курсор переставляется в начало файла и 16 нулевых байт перезаписываются подписью. Для системы которая один раз пишет — много читает, возможность сразу направить поток расшифрованных данных потребителю критически важна.
- Файл 3,5Гб: шифрование ~ 4 сек, расшифровка ~ 3.8 сек (1 CPU ~ 70%, RAM ~ 50Мб)
- Файл 9,4Мб: шифрование ~ 17.7 мс, расшифровка ~ 16.8 мс
- Файл 68Кб: шифрование ~ 11 мс, расшифровка ~ 9.5 мс
Release files for ttcrypto 0.2.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| ttcrypto-0.2.1.tar.gz | 13.8 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| ttcrypto-0.2.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 22.8 kB
Release files / ttcrypto-0.2.1.tar.gz
| Download URL | ttcrypto-0.2.1.tar.gz |
|---|---|
| Size | 13.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
fa04db2dd647d116f9f6a71369fe5be437f54fbb6c78021f695c9deee83cc05d
|
|
BLAKE2b-256 checksum How to use checksums |
f51abfaa09ed9ba25c6808883393cef3e26203d4da04dea939d2bb815847a6c8
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.6 {"installer":{"name":"uv","version":"0.11.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Arch Linux","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / ttcrypto-0.2.1-py3-none-any.whl
| Download URL | ttcrypto-0.2.1-py3-none-any.whl |
|---|---|
| Size | 9.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
97ab86c49a9e4fb1070b8d7cf3bb22c0508bbafb6922bc7d5385a9076277a24a
|
|
BLAKE2b-256 checksum How to use checksums |
5059db44f8433c973b27fb249144d5069ced676e90eaeb4886c76e8fb0841a2a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.6 {"installer":{"name":"uv","version":"0.11.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Arch Linux","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|