Skip to main content

Tools for encryption/decryption

Project description

Version Supported Python Version Downloads


ttCrypto

Утилита для шифрования и расшифровки данных в буфере, поточно или в файле.

Библиотека содержит функции и консольную утилиту для работы с файлами.

Установка

pip install ttcrypto

Использование в коде

Простое шифрование/расшифровка (AES-256-GCM)

from ttcrypto import aes

encrypted_bytes = aes.encrypt_gcm_plain(text_bytes, passphrase)
decrypted_bytes = aes.decrypt_gcm_plain(encrypted_bytes, passphrase)

assert to_string(decrypted_bytes) == text

Проточное шифрования по AES-256-GCM

from ttcrypto import encrypt_gcm_generator

enc = encrypt_gcm_generator(passphrase)         # инициализируем генератор
encrypted_bytes = enc.send(None)                # генерируем salt + nonce для сессии
encrypted_bytes += enc.send(b'123')             # отправляем порцию данных (в цикле)
encrypted_bytes += enc.send(b'')                # отправляем пустую строку для финализации
encrypted_bytes = next(enc) + encrypted_bytes   # next вычисляет tag, ставим его в начало
# encrypted_bytes = tag(16) + salt(16) + nonce(16) + ciphertext

Проточная расшифровка по AES-256-GCM

from ttcrypto import decrypt_gcm_generator

dec = decrypt_gcm_generator(passphrase) # инициализируем генератор
dec.send(None)                          # инициализируем ввод (всегда отвечает b'')
data = dec.send(encrypted_bytes)    # отправляем порцию данных (в цикле) - не менее 45 байт
data += dec.send(b'')               # отправляем b'' для финализации
# data - оригинальные расшифрованные данные

Консольная утилита

Шифрование/расшифровка файла (интерактивный ввод секрета)

$ ttcrypto -e source.txt target.enc
$ ttcrypto -d source.enc target.txt

Шифрование с перезаписью целевого файла и передаченй секрета в команде

$ export TTCRYPTO_PASSPHRASE=123
$ ttcrypto -efp `echo $TTCRYPTO_PASSPHRASE` source.txt target.enc

Шифрование/расшифровке всех файлов в директории

$ ttcrypto -e source_dir encrypted_files_dir
$ ttcrypto -d encrypted_files_dir origin_files_dir

Шифрование файлов в директории, подходящих по имени

$ ttcrypto -e -n '*.txt' source_dir encrypted_files_dir

Модуль криптографии AES-256-GCM (PBKDF2HMAC)

Cодержит:

  • функции шифрования/расшифровки байтов (с полной буферизацией),
  • функции-генераторы для поточного шифрования/расшифровки (без полной буферизации)
  • функции для работы с BufferedIOBase объектами (с интерфейсов файлов)

Сложность реализации поточной обработки при использовании GCM алгоритма заключается в том, что подпись (tag) вычисляется после обратки всех данных и как правило дописывается в конец файла. Но при расшифровке подпись нужна до обратки данных - а чтение файла с конца не всегда возвожно. Поэтому решено записывать тег в начало контейнера, вместе с другими метаданными:

tag(16) + salt(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 мс

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

ttcrypto-0.2.tar.gz (13.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ttcrypto-0.2-py3-none-any.whl (9.0 kB view details)

Uploaded Python 3

File details

Details for the file ttcrypto-0.2.tar.gz.

File metadata

  • Download URL: ttcrypto-0.2.tar.gz
  • Upload date:
  • Size: 13.9 kB
  • Tags: Source
  • Uploaded using 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}

File hashes

Hashes for ttcrypto-0.2.tar.gz
Algorithm Hash digest
SHA256 fc0ba958481908403d385ee5f12cf06dcb7ce8e29f98e6aa6f33d76a8ac56a8a
MD5 e5dc82e0c1eed46ebb8849438771152d
BLAKE2b-256 5cc89293a8a5394b92d20bd8293c4642a155b8f6fdccaef228d0f285103dec12

See more details on using hashes here.

File details

Details for the file ttcrypto-0.2-py3-none-any.whl.

File metadata

  • Download URL: ttcrypto-0.2-py3-none-any.whl
  • Upload date:
  • Size: 9.0 kB
  • Tags: Python 3
  • Uploaded using 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}

File hashes

Hashes for ttcrypto-0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 e03a40b8286adb4d99f94663643d24f47ab416116af82b751466ccdb3e50fcdf
MD5 14b95b975f5c541468a498a13bebbd4f
BLAKE2b-256 4f6070a82f15562a6ffbfbd4e026a6abc8d3df5d647bdf2e8d707d07ea77670d

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page