Skip to main content

A simple-to-use file encryption script

Project description

tests codecov GitHub GitHub last commit (branch) GitHub release (latest SemVer) GitHub Repo stars GitHub forks

kapak: A simple-to-use file encryption script

Description

Kapak is a simple-to-use file encryption script.
It uses AES_256_CBC as its encryption cipher and
scrypt key derivation algorithm to generate a 256 bit key.

If you are wondering what kapak means, it means mold.

Installation

pip install kapak

CLI Usage

kapak [global options] [command] [command options] [input]
kapak [encrypt | e] [options] [input]
kapak [decrypt | d] [options] [input]

Encrypt file

$ kapak encrypt -o ./image.jpg.kpk ./image.jpg
Enter password:
Confirm password:
■■■■■■■■■■ 100%
$ kapak decrypt -o ./image.jpg ./image.jpg.kpk
Enter password:
■■■■■■■■■■ 100%

Encrypt stdin

$ echo 'secret stuff' | kapak encrypt | base64
Enter password:
Confirm password:
AAAAbWth...t/ILJW/v
$ echo 'AAAAbWth...t/ILJW/v' | base64 --decode | kapak decrypt
Enter password:
secret stuff
$ cat ./text.txt | kapak encrypt -b 1024 > ./text.txt.kpk
Enter password:
Confirm password:
$ kapak decrypt -b 1024 ./text.txt.kpk > ./text.txt
Enter password:

Password file

$ echo 'P@ssw0rd' > ./password.txt
$ kapak encrypt -p ./password.txt -o ./image.jpg.kpk ./image.jpg
■■■■■■■■■■ 100%
$ kapak decrypt -p ./password.txt -o ./image.jpg ./image.jpg.kpk
■■■■■■■■■■ 100%

Integration

Encrypt file

from pathlib import Path
from kapak.aes import encrypt

input_file = Path("image.jpg")
output_file = Path("image.jpg.kpk")

with input_file.open("rb") as src, output_file.open("wb") as dst:
    total_len = input_file.stat().st_size
    progress = 0
    for chunk_len in encrypt(src, dst, "P@ssw0rd"):
        progress += chunk_len
        print(f"{progress}/{total_len}")

kapak.aes.encrypt is a generator. It yields the length of encrypted data on every iteration.

from pathlib import Path
from itertools import accumulate
from kapak.aes import decrypt

input_file = Path("image.jpg.kpk")
output_file = Path("image.jpg")

with input_file.open("rb") as src, output_file.open("wb") as dst:
    total_len = input_file.stat().st_size
    for progress in accumulate(decrypt(src, dst, "P@ssw0rd")):
        print(f"{progress}/{total_len}")

kapak.aes.decrypt is a generator. It yields the length of decrypted data on every iteration.

Encrypt stdin

import io
import sys
import base64
from kapak.aes import encrypt

with io.BytesIO() as dst:
    for _ in encrypt(
        src=sys.stdin.buffer,
        dst=dst,
        password="P@ssw0rd",
        buffer_size=1024
    ):
        pass
    encrypted_data = dst.getvalue()
    encrypted_data_base64 = base64.standard_b64encode(encrypted_data)
    print(encrypted_data_base64.decode("utf-8"))

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

kapak-4.0.0rc1.tar.gz (12.6 kB view hashes)

Uploaded Source

Built Distribution

kapak-4.0.0rc1-py3-none-any.whl (13.4 kB view hashes)

Uploaded Python 3

Supported by

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