https://github.com/zlobendog/polars_encryption
A Polars plugin for encrypting and decrypting data using AES-GSM-CIV algorithm in Rust
https://github.com/zlobendog/polars_encryption
Last synced: 5 months ago
JSON representation
A Polars plugin for encrypting and decrypting data using AES-GSM-CIV algorithm in Rust
- Host: GitHub
- URL: https://github.com/zlobendog/polars_encryption
- Owner: zlobendog
- License: gpl-3.0
- Created: 2024-06-06T10:25:51.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2025-01-08T11:24:39.000Z (11 months ago)
- Last Synced: 2025-01-08T11:38:19.650Z (11 months ago)
- Language: Python
- Size: 72.3 KB
- Stars: 6
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-polars - polars_encryption - Polars plugin that extends Polars with encryption algorithm AES-GSM-SIV by [@zlobendog](https://github.com/zlobendog). (Libraries/Packages/Scripts / Polars plugins)
README
# Polars Encryption
This is a plugin to extend Polars with encryption algorithm **AES-GSM-SIV** written in Rust for a blazing fast (c) performance.
# Changelog
08-01-2025: updated for latest versions of Polars and rust
# Sources
This plugin is built using a guide by [Marco Gorelli](https://marcogorelli.github.io/polars-plugins-tutorial/).
The encryption algorithm crate is [this](https://docs.rs/aes-gcm-siv/latest/aes_gcm_siv/). The specific implementation is a 256bit version of it.
## Usage
There are two methods: encrypt and decrypt. Both require key and nonce, as per algorithm specification.
```python
import polars as pl
from polars_encryption import encrypt, decrypt
# Define the DataFrame
df = pl.DataFrame({
"plaintext": ["Hello, world!", "Polars is fast!", "Encrypt me!"]
})
# Define the encryption key and nonce
key = b"an example very very secret key."
nonce = b"unique nonce" # 12 bytes (96 bits)
# Encrypt the plaintext column
df_encrypted = df.with_columns(
encrypt(pl.col("plaintext"), key=key, nonce=nonce).alias("ciphertext")).with_columns(decrypt(pl.col("ciphertext"), key=key, nonce=nonce).alias("decrypted"))
print((df["plaintext"] == df_encrypted["decrypted"]).all())
print(df_encrypted)
```