Skip to main content

Warning: This implementation is intended for analysis and educational purpose and should not be used for real-world security.

About

  • Author: shrimp2845
  • Version: 0.5.0
  • License: MIT

A pure Python implementation of the Advanced Encryption Standard (AES) algorithm with support for multiple key sizes, configurable internal transformations, detailed logging, and multiple cipher modes of operation.

Features

  • AES-128/AES-192/AES-256 support
  • ECB/CBC/CTR modes
  • PKCS#7 padding
  • Custom AES transformation configuration
  • Custom S-Box support
  • Encryption/decryption logging

Project Structure


project_AES/
  ├── __init__.py
  ├── block_utils.py
  ├── configs.py
  ├── project_AES.py
  └── aes_core/
      ├── __init__.py
      ├── cipher.py
      ├── core_utils.py
      ├── key_expansion.py
      ├── math_utils.py
      └── round.py

Installation

Requires Python 3.10+

pip install project-aes

or

pip install tqdm
git clone https://github.com/shrimp2845-tw/project_AES.git
cd project_AES

Quick Start

from project_AES import AES
key = b"0123456789abcdef"
plaintext = b"hello world"
cipher = AES(key)
ciphertext = cipher.encrypt(plaintext)
print(ciphertext)

Docs

class initialize
----------------------
from project_AES import AES
aes = AES(key, mode='ECB', config=None)

key -> bytes (16, 24 or 32 bytes)
Required. AES key for 128/192/256-bit encryption.
mode -> str (optional)
Block cipher mode of operation.
Supported: 'ECB', 'CBC', 'CTR'
Default: 'ECB'
config -> AESConfig (optional)
Advanced configuration. Default is AESConfig()


methods
----------------------
encrypt(data: bytes) -> bytes
decrypt(data: bytes) -> bytes
→ Encrypt/decrypt bytes data

encrypt_block(block: bytes) -> bytes
decrypt_block(block: bytes) -> bytes
→ single block (16 bytes) encryption/decryption

Examples

This project includes three example scripts demonstrating different functionalities of the module:

​1.File Cipher: A script for encrypting and decrypting files using AES with various operation modes (ECB, CBC, CTR).

​2.Avalanche Observation: A script to observe the avalanche effect by testing how bit-flips in plaintext affect the ciphertext under different configurations.

3.Differential: A script constructs Difference Distribution Tables (DDT) to analyze the cryptographic strength of the S-Box (both standard and user defined).

Samples

1.File Cipher:

You can try to decrypt these examples by your self

  • hina.png -> encrypt(key=gehenna, mode=ECB) -> hina.bin

  • kayoko.jpg -> encrypt(key=cat, mode=CBC) -> kayoko.bin

  • r18.gif -> encrypt(key=give you up, mode=CTR) -> r18.bin

(I originally wanted to use a picture of Shiina Mahiru, but I couldn’t find any good images under a cc license QAQ)

2.Avalanche Observation:

Alt-text

Disclaimer

This implementation is intended for analysis and educational purposes only.
It does not guarantee cryptographic security or production-level performance efficiency.

Do not use this project in any environment that requires strong security assurances.

License

Source code: MIT License

Example assets: Some materials under /examples/test_files are used for demonstration purposes only and remain under their original license:

© SeriBaKa (https://www.deviantart.com/seribaka/art/Blue-archive-sorasaki-hina-905973822)

© らんどう(https://www.pixiv.net/artworks/116363500)

Thanks to the original creators 🤎

Metadata

Release files for project-aes 0.5.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for project-aes 0.5.0
File Size Uploaded
project_aes-0.5.0.tar.gz 13.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for project-aes 0.5.0
File Interpreter ABI Platform
project_aes-0.5.0-py3-none-any.whl Python 3 none any Details

Total release size: 26.7 kB

Release files / project_aes-0.5.0.tar.gz

Download URL project_aes-0.5.0.tar.gz
Size 13.0 kB
Tags Source
SHA-256 checksum
How to use checksums
e5c131bca5d011a271a49e02ea631f3a0f4c374bee4c7540384113e1dc8cf26e
BLAKE2b-256 checksum
How to use checksums
af4a5c2716c089733d363ed22b9511cba8c1c30bf28b7a10215aa6044ef0cefd
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.10.20

Release files / project_aes-0.5.0-py3-none-any.whl

Download URL project_aes-0.5.0-py3-none-any.whl
Size 13.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
79512ba3a3b24c34268656db57e9b9dfc2153b528973b9b00b29a2274491c8dc
BLAKE2b-256 checksum
How to use checksums
1dc2e87b4bc759c22255fa7d6fbb36c85c9c6ddf47517a3fb2aa5039bb24c443
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.10.20

Release history Release notifications | RSS feed

This release

0.5.0 This release

2 release files

0.4.3

2 release files

0.4.2

2 release files

0.4.0

2 release files

0.3.0

2 release files

0.2.0

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page